2017-06-20 6 views
0

私はRails "Getting Started"ガイドを見ていて、リンクパスを決定するコードの興味深い差異に気づいた。Rails:ネストされたパスの表示規約

<%= link_to 'Destroy', article_path(article), 
    method: :delete, data: { confirm: 'Are you sure?' } %> 

を、子モデル、commentのために、我々は持っている:: は、親モデル、articleのために、私たちは持っている

<%= link_to 'Destroy Comment', [comment.article, comment], 
method: :delete, data: { confirm: 'Are you sure?' } %> 

これらはでモデルへのリンクのための非常に異なるフォーマットであるように見えます同様の状況。テクニカルまたはメソドロジ関連の説明がありますか?私は特に2つの項目の配列がcommentのために必要であるのは不思議です。

最後に、私の継承本能は、コードがarticle.commentの代わりにcomment.articleであるべきだと教えてくれます。この注文の裏の理由は何ですか?

答えて

2

@hashrocket答えに追加するには、それはすべてのRailsがネストされたリソースのルートを作成する方法にダウンしています。 rake routesを実行した場合、あなたは見ることがこの

意味
article   DELETE /articles/:id(.:format) articles#destroy 

article_comment DELETE /articles/:article_id/comments/:id(.:format) comments#destroy 

、記事ため削除要求だけ取る:idキー/パラメータ、コメントを削除要求が2article_idを必要とするのに対し、(として特定のコメントがに属する記事の:id)とコメントそのものの:idが含まれます。簡単に言えば

、記事を削除するには、あなただけのその:idを必要とするので、それはarticle_path(article)で、記事のあなたは(:article_idために働く):idを必要とするコメントを削除する一方で、それが属しているとコメントの:idしたがって、それは[comment.article, comment]です。私はあなたがよりよく理解するために約nested resourcesを読むことをお勧めarticle_comment_path(comment.article, comment)

のようにしても、それを書くことができます

2

ガイドの少し前の方で、記事とコメントの関連付けを設定することができます。記事には多くのコメントがあり、コメントは記事に属します。

コメントを削除するための配列があるのは、その関連が原因でコメントが属する記事とそのコメント自体を知る必要があるためです。コメントは記事に属するので、削除したいコメントを見つけるには記事IDが必要です。それがコメントなのです。コメントが所属する記事を探しています。

article.commentを書くと、記事のコメントではなく記事のコメントが表示されます。

関連する問題