【发布时间】:2010-08-05 15:44:50
【问题描述】:
我有一个控制器,它包含 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
编辑
当我将当前操作移动到应用程序控制器时,一切都按预期工作。命名路由必须与资源路由冲突。
/编辑
我错过了什么?有没有更好的路由方法?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 routing