2013-11-09 29 views
0

我回顾了Rails指南的"Rails Routing From The Outside In"部分,我碰到这部分传来:Rails如何从Rails Guides中知道在这个例子中使用哪个控制器的“show”动作?

有时候,你有资源的客户端总是仰望没有 引用的ID。例如,您希望/ profile始终显示当前登录用户的配置文件 。在这种情况下,你可以使用 单一的资源映射/配置文件(而不是/资料/:ID)到 show动作:

get 'profile', to: 'users#show' 

传递字符串匹配指望控制器#行动格式, 同时传递一个符号将直接映射到一个动作:

get 'profile', to: :show 

该指南称,“经过一个符号将直接映射到操作”,但让我们说我有多个控制器,每个有“秀'行动。 Rails如何知道使用哪一个,因为我不再引用特定的控制器?

回答

2

该文件有点误导,不是吗。这是一个不好的例子。关于传递符号的评论是一般性评论,应该在单数资源部分之外。

rake routes 
rake aborted! 
missing :controller 

所以,你必须添加一个:controller选项用于对资源外工作:

事实上,如果你尝试独立,你会开始导轨或运行rake routes时,遇到下列错误声明:

get 'profile', to: :show, controller: 'users' 

他们指定的语法是resourcesresource声明内有效,如:

resources :user do 
    collection do 
    get 'profile', to: :show 
    end 
end 

resource :user do 
    get 'profile', to: :show 
end 

然而这两个实施例产生与现有例子不同的路由。再次,我认为这个评论是错误的。

+0

看起来'get'profile','users#show',controller:'users''应该是'get'profile',到::show,controller:'users''。如果我们以第一种方式写行,'controller'选项不起作用。 – izaban

+0

感谢izaban,好点。我更新了这个例子。 – sampierson

2

看来,它不知道......

#config/routes.rb 

get 'profile', to: :show 

从控制台:

$ rake routes 
rake aborted 
missing :controller 

第一个例子: '用户#秀',并创造一个成功的路线一样,

get 'profile', to: :show, controller: 'users' 
相关问题