Rails 3 – 嵌套资源路由
在我的应用程序中,我有用户,然后每个用户都有一个邮箱,他们在那里发送邮件。 我的routes.rb看起来像:
resources :users do resources :mailboxes end
如果我做一个rake路线,我看到这条路线可供我使用:
user_mailbox GET /users/:user_id/mailboxes/:id(.:format) {:action=>"show", :controller=>"mailboxes"}
我想在我的应用程序布局中链接到此路径,在用户在屏幕顶部找到的工具栏中。
我的观看代码是:
'mail_notice'), user_mailbox_path(current_user)%>
我遇到的问题是,如果我对用户/ *没有任何帮助,我会收到此路径的路由错误 – 所以我的应用程序中的任何其他位置除了我的邮箱嵌套在其下的资源之外。 如果我在,让我说用户的索引页面,路径确实可以正常工作。
No route matches {:action=>"show", :controller=>"mailboxes",
这条路线有什么我可以错过的吗? 任何与用户相关的东西都有效,它只是我遇到问题的邮箱。
谢谢
听起来邮箱应该是一个单一的资源。
resources :users do resource :mailbox end
否则,它会期望用户有多个邮箱,并且您还必须将mailbox_id
提供给user_mailbox_path
。
user_mailbox_path(current_user, @mailbox)
正如您从路线中看到的那样:
user_mailbox GET /users/:user_id/mailboxes/:id(.:format)
你需要提供两个id,即:user_id和邮箱的id。 如果用户可以拥有多个邮箱,这是有意义的。
<%= link_to image_tag("mail_icon.png", :id => 'mail_notice'), user_mailbox_path(current_user, current_user.mailboxes.first) %>
如果您打算让用户只有一个邮箱,那么我会改变routes.rb,如下所示:
resources :users do get :mailbox, :on => :member end
你会得到一条路线:
mailbox_user GET /users/:id/mailbox(.:format)
这将由UsersController
上的mailbox
方法处理,您可以使用mailbox_user_path(current_user)
在视图中获取它的路径。
- 无法选择created_at分组的行
- add_dependency和add_runtime_dependency之间的区别?
- 开始API缓存
- Rails 3“last”方法从ActiveRecord输出返回不正确的结果
- 在显示日期时,使Rails忽略夏令时
- Ruby on Rails的content_for会自动进行HTML转义吗?
- 是否有一颗gem可以规范并格式化ruby中的美国电话号码?
- 如何调用所有评论的post(在这种情况下为锻炼),其中exercise.user_id == current_user.id?
- Ruby on Rails ActiveRecord“has_many:through”唯一性validation