Зачем добавлять соединение в файл маршрутов при использовании link_to в rails 2 - PullRequest
0 голосов
/ 15 июня 2011

Я пытался выполнить следующее:

<% = link_to "Выйти", {: controller => 'users',: action => 'logout'},: class => 'menulink2'%>

Но это не сработало, оно всегда перенаправляло меня на просмотр шоу.Мне нужно было иметь следующее для моего ports.rb:

map.*

Почему рельсы не распознали действие, которое я проходил ('выход из системы')?

1 Ответ

0 голосов
/ 15 июня 2011

Эта логика должна быть где-то указана. Должно быть какое-то отображение из хеша {:controller => 'users', :action => 'logout'} в URL, а место, которое делается в rails, - это файл routes.rb. В старых версиях рельсов многие routes.rb поставлялись по умолчанию в конце:

map.connect ':controller(/:action/(:id(.:format)))'

Что позволило бы задать любой хеш: controller,: action и затем направить на host.url/:controller/:action.


В более современных версиях маршруты, основанные на ресурсах, очень популярны, и контроллеры, которые не следуют соглашениям REST рельсов (т. Е. Имеют только :index,:show,:create,:new,:edit,:update,:destroy методы), обычно должны каким-то образом явно указывать свои маршруты.

(либо с map.resources :users, :collection => {:get => :logout}, либо с map.connect( 'some_url', :controller => 'users', :action => 'logout'}))


Я предполагаю, но причина, по которой они это сделали, - это, вероятно, то, что действия контроллера на самом деле являются просто его публичными методами.

Часто приятно иметь в ваших контроллерах публичные методы, которые не являются конечными точками url для тестирования.

Например, вы можете иметь before_filter s в качестве открытых методов, которые вы можете захотеть протестировать, не используя @controller.send(:your_before_filter_method) в вашем тестовом коде.

Таким образом, они вносят в белый список действия с ресурсами и делают остальные недоступными по умолчанию. Позвольте мне просмотреть журнал изменений рельсов и посмотреть, прав ли я.

...