2014-02-26 211 views
0

如:嵌套路線| Rails4

User: localhost:3000/users/1 
Message: localsthost:3000/messages/1 

Messageuser_id,所以我試圖巢Messages像這樣:來自用戶1

消息1:

localhost:3000/users/1/messages/1 

哪有我嵌套這個?我讀了Rails Routing,但無法完全理解。

我嵌套的資源:

路線:

devise_for :users, :path => '', 
        :path_names => { :sign_in => 'login', :sign_out => 'logout', :sign_up => 'register' } 

    # User Profiles 
    get 'u/:id' => 'users#show', as: :user 

    # Gits 
    resources :users do 
    resources :messages 
    end 

現在的路線是這樣的:

new_user_message GET /users/:user_id/messages/new(.:format)  messages#new 
edit_user_messaget GET /users/:user_id/messages/:id/edit(.:format) messages#edit 
user_message  GET /users/:user_id/messages/:id(.:format)  messages#show 

更新我的新郵件鏈接:

<%= link_to "New Message", new_user_message_path%> 

但我得到了Erro r:

No route matches {:controller=>"messages", :action=>"new", :id=>"1"} missing required keys: [:user_id] 
+0

您實際上與[答案](http://guides.rubyonrails.org/routing.html#nested-resources)相關聯。如果你有一個特定的問題,一定要包括你正在嘗試,期待和實際得到你的問題的細節。 – coreyward

+0

更新了我的問題 –

回答

1

它在您發佈的鏈接中可用。搜索此標題:2.7 Nested Resources並瞭解更多。無論如何,這是答案。

resources :users do 
    resources :messages,only: [:show] 
end 

還記得不要太深。超過1層的嵌套不是很好。


新的更新問題後。試試這個:

new_user_message_path(current_user.id) 

,如果你使用的是設計或者一些有定義爲當前用戶CURRENT_USER或這將工作,如果你有一些其他的物體,像具有所要求的用戶信息@user。然後使用類似

new_user_message_path(@user.id) 

基本上問題是你沒有提到用戶ID。

+0

我不知道我在想什麼。未定義的局部變量或方法'new_messages_path'既不'new_user_messages_path' –

+0

你介意加入我聊天嗎? - > http://chat.stackoverflow。COM /間/ 48527 /嵌套資源護欄 –

0

你的錯誤是不能提供所期望參數new_user_message_path造成的:

<%= link_to 'Create User', new_user_message_path(@user) %> 

用戶下創建一個新的消息,正確的路徑是/users/:user_id/messages/new。爲了讓Rails構建它,你需要告訴它什麼:user_id應該是。 ActiveRecord對象知道如何序列化爲一個路由友好型密鑰,所以你可以傳入一個User的實例,而不是明確地指定user.id