У меня есть контроллер с 7 действиями RESTful и дополнительным «текущим» действием, которое возвращает первую активную запись foo:
class FooController < ApplicationController
def current
@user = User.find(params[:user_id])
@foo = @user.foos.where(:active => true).first
#use the Show View
respond_to do |format|
format.html { render :template => '/foos/show' }
end
end
#RESTful actions
...
end
Модель Foo: принадлежит_ Модели пользователя и Модель пользователя: has_many Foos.
Если я структурирую маршруты так:
resources :users do
resources :foos do
member do
get :current
end
end
end
Полученный маршрут - '/ users /: user_id / foos /: id'. Я не хочу указывать foo: id, очевидно.
Я также пробовал:
map.current_user_foo '/users/:user_id/current_foo', :controller => 'foos', :action => 'current'
resources :users do
resources :foos
end
Полученный маршрут больше похож на ожидаемый: '/users/:user_id/current_foo'.
Когда я пытаюсь использовать этот маршрут, я получаю сообщение об ошибке:
ActiveRecord::RecordNotFound in FoosController#current
Couldn't find Foo without an ID
1020 * редактировать *
Когда я перемещаю текущее действие в контроллер приложения, все работает как положено. Указанный маршрут должен конфликтовать с маршрутизацией ресурса.
/ редактировать
Чего мне не хватает? Есть ли лучший подход для маршрутизации?