У меня есть контроллер с 7 RESTful действий плюс дополнительными «текущими» действиями, которая возвращает первую активную запись Foo:Rails 3 добавить GET действие для RESTful контроллера
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 Модель: belongs_to Пользователя Модель и модель пользователя: has_many Foos.
Если я структурировать маршруты, такие как:
resources :users do
resources :foos do
member do
get :current
end
end
end
Полученный маршрут '/ пользователей /: идентификатор_пользователя/Foos /: идентификатор'. Очевидно, я не хочу указывать foo: id.
Я также попытался:
map.current_user_foo '/users/:user_id/current_foo', :controller => 'foos', :action => 'current'
resources :users do
resources :foos
end
Полученный маршрут больше, как я бы ожидать:/пользователей /: user_id/current_foo '.
Когда я пытаюсь использовать этот маршрут, я получаю сообщение об ошибке, что читает:
ActiveRecord::RecordNotFound in FoosController#current
Couldn't find Foo without an ID
редактировать
Когда я двигаю текущее действие в контроллер приложения, все работает, как ожидалось. Именованный маршрут должен противоречить маршрутизации ресурсов.
/редактировать
Что мне не хватает? Есть ли лучший подход для маршрутизации?
Немного неинтуитивно, но это сработало - спасибо. Любые мысли о том, как обрабатывать случай, если соответствующий foo не найден? Я, вероятно, хочу показать страницу, в которой говорится, что «у этого человека нет foo», вместо того, чтобы возвращаться на последнюю страницу и показывать флеш-сообщение. – craig
hmm, трудно сказать, как пользователь может выбрать текущий foo ?. Вы смотрите на пользователя, а затем нажмите кнопку/следуете ссылке, чтобы найти текущие foo, назначенные этому пользователю? Если это так, я бы подумал, возвращаясь на запрашивающую страницу, с уведомлением о том, что никаких фосов не было бы в порядке. – Doon