如果您将资源地图添加到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
。
答案 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)。