这就是我想要做的事情:
= form_tag(path) do
- @items.each do |i|
= fields_for "i[]", i do
%input.content{:name => "content", :type => "hidden"}
= submit_tag "Submit"
如您所见,我尝试将.content
的所有items
输入值传递给路径。
这些是我得到的参数:
{"utf8"=>"✓", "content"=>"", "commit"=>"Submit"}
我期待这样的事情:
{"items": [
{
"id":1,
"content":""
},
{
"id":2,
"content":""
},
{
"id":3,
"content":""
},
] }
如何在rails中创建这些POST请求?
答案 0 :(得分:0)
这比你试图做到的更简单。如果每个嵌套模型都有一组字段,则往往只需要fields_for
。在这里你只有一个隐藏的列,所以我选择只使用一个隐藏的字段,例如:
= form_tag(path) do |f|
- @items.each do |i|
= f.hidden_field "items[#{i.id}]", value: i.content
= submit_tag "Submit"
注意:不要将错误测试作为练习留给读者。
这将生成一组参数,用于映射项目的ID与内容的对比,例如:"items"=>{"38383285"=>"", "304713261"=>"Some content here", "547539357"=>"Some other content here"}
您可以通过迭代来改变您喜欢的实际值。
您没有提供模型实际结构的任何示例 - 因此我猜测您将如何使用它...您需要(可能大量)修改下面的示例以满足您的实际需求。
一方面 - 鉴于它是一个隐藏的领域 - 我不知道你试图更新的是什么其他模型(和列)。因此,假设您有第二个名为OtherItem
的模型,该模型还有一个内容字段,并通过Item
列映射到item_id
。在这种情况下,你可以这样做:
def my_action
item_ids = params[:items].keys
items = OtherItem.where(:item_id => item_ids)
items.each do |item|
item.update(content: params[:items][item.item_id])
end
# other stuff here
端