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 /articles
或 PUT/PATCH /articles/:id
取决于记录是新的还是现有的) .
嵌套路由
嵌套路由是指在 URL 中具有两级资源的路由。例如,您可能有一个 "comment" 资源,它 嵌套在 和 "article" 资源之下(因为评论属于文章)。在这种情况下,form_for
的路由看起来像 POST articles/:article_id/comments
和 PUT 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
是新评论。
在官方rails指南中,我遇到了
<%= form_for([@article, @article.comments.build]) do |f| %>
....
<%end %>
我不太清楚form_for的两个参数代表什么。我认为第一个参数 @article 是指评论和文章的关联模型,第二个参数似乎是在创建新评论。
为什么它们在那里,为什么两个参数都在一个数组中..?
此特定代码片段演示的是嵌套路由。
非嵌套路由
在 form_for
调用中,方法参数用于确定表单应提交给哪个资源 URL。例如,如果我们有 form_for(@article)
那么表单将提交给 "article" 资源的路由(POST /articles
或 PUT/PATCH /articles/:id
取决于记录是新的还是现有的) .
嵌套路由
嵌套路由是指在 URL 中具有两级资源的路由。例如,您可能有一个 "comment" 资源,它 嵌套在 和 "article" 资源之下(因为评论属于文章)。在这种情况下,form_for
的路由看起来像 POST articles/:article_id/comments
和 PUT 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
是新评论。