rails form_for 与关联模型

rails form_for with associated models

在官方rails指南中,我遇到了

<%= form_for([@article, @article.comments.build]) do |f| %>
....
<%end %>

我不太清楚form_for的两个参数代表什么。我认为第一个参数 @article 是指评论和文章的关联模型,第二个参数似乎是在创建新评论。

为什么它们在那里,为什么两个参数都在一个数组中..?

此特定代码片段演示的是嵌套路由

非嵌套路由

form_for 调用中,方法参数用于确定表单应提交给哪个资源 URL。例如,如果我们有 form_for(@article) 那么表单将提交给 "article" 资源的路由(POST /articlesPUT/PATCH /articles/:id 取决于记录是新的还是现有的) .

嵌套路由

嵌套路由是指在 URL 中具有两级资源的路由。例如,您可能有一个 "comment" 资源,它 嵌套在 和 "article" 资源之下(因为评论属于文章)。在这种情况下,form_for 的路由看起来像 POST articles/:article_id/commentsPUT articles/:article_id/comments/:id

数组作为参数

数组作为 form_for 调用的参数表明资源将被嵌套,因此将表单提交到嵌套路由。

对于深度嵌套的路由(不推荐),您可以继续为您需要的每个级别向数组添加对象,例如[@category, @article, @comment] 转到 /categories/:category_id/articles/:article_id/comments


在 OP 显示的特定情况下,它将提交给 POST "articles/#{@article.id}/comments",因为 @articles.comments.build 是新评论。