Эта логика должна быть где-то указана. Должно быть какое-то отображение из хеша {: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)
в вашем тестовом коде.
Таким образом, они вносят в белый список действия с ресурсами и делают остальные недоступными по умолчанию. Позвольте мне просмотреть журнал изменений рельсов и посмотреть, прав ли я.