将多个对象绑定到Rails表单

时间:2014-05-19 03:38:02

标签: ruby-on-rails

我遵循本教程 - 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_pathPOSTcomments#create

这是如何工作的?当它有两个对象时,它如何知道该怎么做?数组中对象的顺序是否重要?你能拥有两个以上的物品吗?

1 个答案:

答案 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个对象绑定到表单,我认为这取决于您的资源嵌套程度

更新:

您正在使用表单。表单适用于createupdate个对象,具体取决于对象是否存在。 submit按钮将触发该按钮。这个article总结得非常好

“当用户单击表单上的提交时,Rails会在关联的控制器中调用create(对于新记录)或更新(对于现有记录)操作。默认情况下,表单是使用HTTP POST命令提交的,并且在表单中输入的所有信息都在一个名为params的散列中提供,该散列可供控制器使用。“