【问题标题】:Rails 3 - Nested Resources RoutingRails 3 - 嵌套资源路由
【发布时间】:2011-06-15 04:31:38
【问题描述】:

在我的应用程序中,我有用户,然后每个用户都有一个邮箱,用于传递消息。我的 routes.rb 看起来像:

  resources :users do
    resources :mailboxes 
  end

如果我执行 rake 路线,我会看到这条路线可供我使用:

user_mailbox GET    /users/:user_id/mailboxes/:id(.:format)                           {:action=>"show", :controller=>"mailboxes"}

我想在我的应用程序布局中链接到此路径,在用户在屏幕顶部找到的一种工具栏中。

我的查看代码是:

<%= link_to image_tag("mail_icon.png", :id => 'mail_notice'), user_mailbox_path(current_user)%>

我遇到的问题是,如果我对用户一无所知,我会收到此路径的路由错误/* - 因此,除了我的邮箱嵌套的资源之外,我的应用程序中的其他任何地方。如果我打开,假设我的用户的索引页面,路径确实可以正常工作。

No route matches {:action=>"show", :controller=>"mailboxes",

这条路线有什么我可能缺少的吗?与用户相关的任何内容都有效,只是我遇到问题的邮箱。

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    听起来邮箱应该是单例资源。

    resources :users do
      resource :mailbox
    end
    

    否则,它会认为用户有多个邮箱,您还必须提供 mailbox_iduser_mailbox_path

    user_mailbox_path(current_user, @mailbox)
    

    【讨论】:

    • Doh,非常感谢您的帮助。在过去的几个月里,这可能是我第二次或第三次搞砸了。真丢人。我很感激。
    【解决方案2】:

    从路线上可以看出:

    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) 在您的视图中获取到它的路径。

    【讨论】:

    • 感谢乔治的帮助。我的愚蠢错误只传递了用户。我真的很感激帮助。我也喜欢使用邮箱作为一种保持整洁的方法的建议。
    猜你喜欢
    • 2011-05-23
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    相关资源
    最近更新 更多