我遵循本教程 - http://tutorials.jumpstartlab.com/projects/blogger.html#i2:-adding-comments。它正在构建一个示例博客应用程序,到目前为止已有Article
模型,并且正在添加Comment
模型。 Article
has_many
评论。
他们希望能够使用文章页面上的表单创建评论:
<h3>Post a Comment</h3>
<%= form_for [ @article, @comment ] do |f| %>
<p>
<%= f.label :author_name %><br/>
<%= f.text_field :author_name %>
</p>
<p>
<%= f.label :body %><br/>
<%= f.text_area :body %>
</p>
<p>
<%= f.submit 'Submit' %>
</p>
<% end %>
我不明白这种形式是如何运作的。它将两个对象绑定到表单,并表示它将提交到article_comments_path
,POST
将comments#create
。
这是如何工作的?当它有两个对象时,它如何知道该怎么做?数组中对象的顺序是否重要?你能拥有两个以上的物品吗?
答案 0 :(得分:1)
您可能会使用嵌套资源:
resources :articles do
resources :comments
end
[ @article, @comment ]
是一个构建嵌套路由的数组。像:
/articles/1/comments
article_comments_path
映射到index
操作(GET)和create
操作(POST)
做rake routes
看看我在说什么:
article_comments_path GET /articles/:article_id/comments(.:format) comments#index
POST /articles/:article_id/comments(.:format) comments#create
基本上,当您使用嵌套资源创建路径助手时,可以使用[ @article, @comment ]
。对象的顺序很重要,因为它是article_comments_path
而不是comment_articles_path
。
是否可以将超过2个对象绑定到表单,我认为这取决于您的资源嵌套程度
更新:
您正在使用表单。表单适用于create
或update
个对象,具体取决于对象是否存在。 submit
按钮将触发该按钮。这个article总结得非常好
“当用户单击表单上的提交时,Rails会在关联的控制器中调用create(对于新记录)或更新(对于现有记录)操作。默认情况下,表单是使用HTTP POST命令提交的,并且在表单中输入的所有信息都在一个名为params的散列中提供,该散列可供控制器使用。“