在官方导轨指南中,我遇到了
<%= form_for([@article, @article.comments.build]) do |f| %>
....
<%end %>
我不太清楚form_for的两个参数是代表什么的。我认为第一个参数 @article 是指相关的评论和文章模型,第二个参数似乎是创建一个新评论。
为什么它们在那里以及为什么两个参数都在数组中??
答案 0 :(得分:3)
此特定代码段演示的内容是嵌套路由。
在form_for
调用中,method参数用于确定表单应提交给哪个资源URL。例如,如果我们有form_for(@article)
,那么表单将提交给&#34;文章&#34;的路线。资源(POST /articles
或PUT/PATCH /articles/:id
,具体取决于记录是新记录还是现有记录)。
嵌套路由是URL中具有两级资源的路由。例如,您可能有一个&#34;评论&#34; 嵌套在&#34;文章&#34;资源(因为评论属于文章)。在这种情况下,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
是一个新评论。