2017-06-20 88 views
0

我正在瀏覽Rails "Getting Started"指南,並注意到代碼中用於確定鏈接路徑的有趣差異。 父模型,article,我們有:Rails:嵌套路徑視圖約定

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

而對於兒童模特,comment,我們有:

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

這似乎是非常不同的格式在鏈接到一個模型類似的情況。是否有解釋 - 技術或方法相關?我特別好奇爲什麼comment需要2個物品的數組。

最後,我的繼承本能告訴我的代碼應該是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鍵/參數,而徵求意見刪除請求需要兩個article_id:id的文章特別評論屬於)和評論本身的:id

簡單來說,要刪除的文章,你只需要它:id所以它是article_path(article),而要刪除一條評論,你需要:id(其用於:article_id)的文章屬於和註釋的:id ,所以它是[comment.article, comment]。你也可以把它寫成:article_comment_path(comment.article, comment)

我建議你看看nested resources更好理解

2

在本指南稍早的部分,您可以看到他們在文章和評論之間建立了一些關聯。一篇文章有​​很多評論和評論屬於一篇文章。

有一個刪除評論的數組的原因是因爲你必須知道評論所屬的文章和評論本身,因爲這些關聯。由於評論屬於文章,我們需要文章ID來查找我們想要刪除的評論。這就是爲什麼它是comment.article。我們正在查找評論所屬的文章。

如果您撰寫article.comment,則會收到有關文章的評論,而不是評論的文章。