Ruby on rails 什么';在一个Rails表单中编辑单个类的多个对象的最佳方法是什么?
我正在开发一个Rails表单,它允许用户通过一次提交来编辑一个类的许多对象的属性。我最初的直觉是为块创建一个外部的Ruby on rails 什么';在一个Rails表单中编辑单个类的多个对象的最佳方法是什么?,ruby-on-rails,ruby-on-rails-3,forms,haml,Ruby On Rails,Ruby On Rails 3,Forms,Haml,我正在开发一个Rails表单,它允许用户通过一次提交来编辑一个类的许多对象的属性。我最初的直觉是为块创建一个外部的表单,然后使用的字段迭代其中的项 但是,没有对象与表单将修改的对象具有一对多关系,因此在我看来,没有对象可以正确地传递到表单中 在任何情况下,我想看到的是一个表单的示例,它可以同时修改多个对象,而无需调用“父”对象。也许这将涉及表单标签 (注意:我在haml中工作,所以haml中的答案将非常棒,尽管没有必要。)好的,有一个父对象将使它更容易 对于许多对象的批量更新,关键是使用正确的输
表单,然后使用
的字段迭代其中的项
但是,没有对象与表单将修改的对象具有一对多关系,因此在我看来,没有对象可以正确地传递到表单中
在任何情况下,我想看到的是一个表单的示例,它可以同时修改多个对象,而无需调用“父”对象。也许这将涉及表单标签
(注意:我在haml中工作,所以haml中的答案将非常棒,尽管没有必要。)好的,有一个父对象将使它更容易
对于许多对象的批量更新,关键是使用正确的输入名称,以便rails将参数解析为数组,即
@posts.each do |post|
fields_for "posts[#{post.id}]", post do |p|
p.text_field :name
p.hidden_field :id
end
end
查看生成的html源代码,查看文本输入得到的名称属性。如果这样做是正确的,params[:posts]现在将是控制器中的一个散列,您可以更新它
也应该是相关的在我的实际情况中还有一些额外的皱纹,但我希望这里有一些伪代码可以说明我所采取的方法:
= form_tag url_for(:controller => "the_controller",
:action => "update") do
@objects_to_be_updated.each do |object|
= check_box_tag "[desired_path][through_the][parameters_hash]", true, object.boolean_attibute
= text_field_tag "[another_path][through_the][parameters_hash]", object.text_attribute
end
end
等等
使用表单帮助程序的\u标记
变体(不需要与活动记录模型关联)有点麻烦,但似乎也能让您更好地控制结果参数的结构。感谢您的回复。我没有意识到
的fields\u不需要对象作为参数。与此同时,我已经找到了自己的解决方案,到目前为止,这似乎是可行的。我会把它贴在下面。