我正在开发一个Rails表单,允许用户使用单个提交编辑类的许多对象的属性。我最初的直觉是创建一个外部form_for
块,然后使用fields_for
遍历其中的项目。
但是,没有任何对象与表单将修改的对象具有一对多的关系,因此在我看来,没有任何对象可以传递到form_for
。
在任何情况下,我想看到的是一个表单的示例,该表单同时修改多个对象而不吸引“父”对象。也许这会涉及form_tag
?
(注意:我正在使用haml,所以haml中的答案虽然不必要,但会很棒。)
答案 0 :(得分:4)
好吧,拥有一个父对象会让它变得更容易。
对于许多对象的批量更新,关键是使用正确的输入名称,以便rails将params解析为数组,即
@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]现在将成为控制器中的哈希值,然后您可以更新。
答案 1 :(得分:0)
我的实际情况还有一些额外的皱纹,但这里有一些伪代码,我希望能说明我采取的方法:
= 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
等等。
使用表单助手的_tag
变体(不需要与Active Record模型关联)有点痛苦,但似乎也可以让您更好地控制结果参数的结构。< / p>