2013-04-29 7 views
11

私はRailsの全く新しい初心者です。入れ子のリソースでLink_toを使用する方法

私は/posts/123/comments/または/posts/123/comments/newを介してアクセスできますが、具体的なコメントを表示するためにインデックスビューでlink_toを使用する方法がわかりません。リンクしようとすると、「no route "または"未定義のシンボル "である。

モデルで定義されている投稿とコメントの間にネストされたhave_manyの関係があります。routes.rbpost_comments GET /posts/:post_id/sensors(.:format)comments#indexがレーキルートを実行すると表示されます。

どうすればいいですか?

答えて

7

を訪問し、完全に動作しますが、私はそれを解決する方法を見つけました。 は、最初の瞬間に、私はコメントに@ post.each内部項目である

post_comments_url(@ポスト、コメント)

使用しました。

"strange"ルートを生成します。

post_comment_url(@の後のコメント)助けるため

ありがとう:代わりに/ "ポスト/ 34/comments.2" のように、私は単数形を使用して、それを修正しました!

+0

' link_to 'show'、[@post、comment] 'を試しましたか? – toch

12

resources :posts do 
resources :comments 
end 

あなたは、私がfull example of nested resources in a past blog post

を書いた

<!-- /posts/:post_id/comments/:id --> 
<%= link_to 'Show', [@comment.post, @comment] %> 

を以下のようにコメントをリンクすることができますが、ネストされたリソースを定義している(そしてもちろん、あなたのモデルCommentPostが関連付けられている)場合

+0

コードを に変更しました<%@ posts.each do | item | %> ​​<%= item。ノンブル%>は ​​<%= item.info%> ​​<%=のlink_to 'ショー'、[comment.post @、@comment]%> <% end %> 、それdoesntの実行...未定義のメソッドポストが表示されます。 どうすればいいですか? ありがとう! – fuco

+0

これはおそらく、あなたの 'Comment'モデルが' Post'に関連付けられていないからでしょう。 'Comment'モデルに' belongs_to:post'を付けるべきです。そうでなければ、それは決まっていません。 '@ comment.post'をコメントを含む' Post'オブジェクト(あなたの場合はおそらく 'item')に置き換えることもできます。 – toch

+0

それは私のために働いていません: 'post_comment_path'が未定義であると文句を言っています(' rake routes'に表示されるルーティングは 'post_comments'、複数) – digitig

0

トーチの回答に加えて、Railsコンソールの助けを借りてlink_toコールをデバッグすることができます。このため

、コンソールでビューヘルパーをロードする必要があります:ルートのデバッグのためのルートをレーキに似

irb(main):001:0> include ActionView::Helpers::UrlHelper 
=> Object 
irb(main):002:0> helper.link_to "posts", app.posts_path 
=> "<a href=\"/posts\">foo</a>" 

もう1つのツールは、次のとおりです。https://github.com/schneems/sextant

1

はの最初の列からメソッド名を取得します。

rake routes 

それに応じてIDを渡します。そしてもちろん、接尾辞_path IR _url とメソッド名の詳細を知るためには、それはdidntの答えのすべてを試した後Rails guide

関連する問題