Rails:正确路由命名空间资源

时间:2009-04-08 19:35:31

标签: ruby-on-rails

如果您将资源地图添加到Rails 2.3中routes.rb中的命名空间,那么如何使link_to(以及form_for等)明白应该获取命名空间控制器而不是根命名空间中的一个?

例如......

routes.rb

map.namespace :admin do |admin|
  admin.resources :opt_in_users
end

这在视图中:

<%= link_to @anOptInUser %>

link_to应使用link_for_admin_opt_in_user,而是尝试使用失败的link_for_opt_in_user

4 个答案:

答案 0 :(得分:7)

对于命名空间资源,与嵌套资源一样,您可以使用带符号的数组:

link_to 'Click here', [:admin, @opt_in_user]

form_for [:admin, @opt_in_user] do |form| ....

答案 1 :(得分:2)

url_for的rails docs表明你必须明确地调用它:

  

如果你代替哈希传递记录   (如活动记录或活动记录   Resource)作为选项参数,   你将触发指定的路线   那条记录。查找将发生   班级的名称。通过一个   Workshop对象将尝试使用   workshop_path路线。如果你有   嵌套路由,例如   admin_workshop_path你必须这样做   明确地称之为(这是不可能的   为url_for猜测那条路线。)

(来自http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#M001564

答案 2 :(得分:0)

Rails可以接受一组对象,然后将这些对象映射到命名路径

e.g。 &lt;%= link_to @ comment.title,[@ article,@ comment]%&gt;

您将获得指向/articles/@article.to_param/comments/@article.to_param

的链接

这可以在form_for和其他地方使用

答案 3 :(得分:0)

使用:

link_to '...', admin_opt_in_user_path(@anOptInUser)

收藏:

admin_opt_in_users_path

您还可以添加编辑和新前缀。

使用form_for时,请确保在新操作上传递admin_opt_in_users_path,在编辑操作时传递admin_opt_in_user_path(@anOptInUser)。