2011-06-15 123 views
0

在我的应用程序中,我有用户,然后每个用户都有一个邮箱,他们在邮件中传递消息。我的routes.rb看起来像:Rails 3 - 嵌套资源路由

resources :users do 
    resources :mailboxes 
    end 

如果我做了耙路线,我可以看到这条路对我说:

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)%> 

我遇到的问题是,我得到这个路径路由错误,如果我什么也不withing用户/ * - 那么其他地方在我的应用程序除了资源我的邮箱嵌套在下。如果我在,让我们说我的用户的索引页,路径确实没有问题。

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

有没有什么我可以错过这条路线?任何与用户有关的工作,只是我遇到问题的邮箱。

谢谢

回答

2

这听起来像邮箱应该是一个单身的资源。

resources :users do 
    resource :mailbox 
end 

否则会认为用户有多个邮箱,你必须提供mailbox_iduser_mailbox_path为好。

user_mailbox_path(current_user, @mailbox) 
+0

Doh,谢谢你的帮助。可能是我在过去几个月里第二次或第三次搞砸了。对我感到羞耻。我很感激。 – Kombo 2011-06-15 04:46:33

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) 

这将由mailbox方法处理UsersController,并且您可以通过mailbox_user_path(current_user)在您的视图中获取路径。

+0

谢谢你的帮助乔治。 Bonehead错误只是通过用户。我真的很感谢帮助。我还喜欢使用邮箱作为一种方法来保持内容的修改。 – Kombo 2011-06-15 04:53:26