2017-06-20 61 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,则会收到有关文章的评论,而不是评论的文章。