【发布时间】:2022-01-09 09:07:41
【问题描述】:
我使用fields_for(),不是用于嵌套表单,而是显示包含连接项的表单。我需要显示来自@seasons 的数据,这有助于我灌装饮料...
<% @seasons do |season| %>
<%= fields_for "drinks[]", season.drink do |f| %>
...
<%= f.select :optimized_region_id ... %>
...
<% end %>
<% end %>
效果很好。 但是,即使 @seasons 永远不会相同,某些 season.drink 也可能是相同的项目,因为它们是“父”关系。 (同季.drink.id) 这对我来说不是问题。
我的问题是表单发送了这个:
drinks"=>{
"e80e15c1-a5d4-4df4-80c6-2efa96e39793"=>{"optimized_status"=>"1", "optimized_nickname"=>"Alex"},
"b7501fe0-3a78-412e-88d5-e7643d761a98"=>{"optimized_status"=>"1", "optimized_nickname"=>"Paul"}
...
}
并且应该发送这个:
drinks"=>{
"e80e15c1-a5d4-4df4-80c6-2efa96e39793"=>{"optimized_status"=>"1", "optimized_nickname"=>"Alex"},
"e80e15c1-a5d4-4df4-80c6-2efa96e39793"=>{"optimized_status"=>"0", "optimized_nickname"=>"Alex"},
"b7501fe0-3a78-412e-88d5-e7643d761a98"=>{"optimized_status"=>"1", "optimized_nickname"=>"Paul"}
...
}
在发送表单时,Rails 似乎正在合并具有相同 id 的饮料。是否有可能避免这种情况并发送所有饮料,即使它们具有相同的drink.id ?
【问题讨论】:
-
在参数对中使用数组 (
[]) 对于除了简单值之外的任何东西都不是一个好主意 - 当您传递嵌套对象时,它们将始终发生冲突,因为参数解析器无法区分它们。相反,rails 使用带有键的散列(drinks[0]...,drinks[1]...)。您不应该首先手动遍历集合。只需将其传递给<%= fields_for :drinks, @drinks do |f| %>...的字段即可。 -
谢谢马克斯。不一定明白。我需要在表格中发送一系列饮料。使用您的代码不会构建数组并仅发送表单的最后一杯。将我的表单视为要发送到控制器的饮料网格。
标签: ruby-on-rails forms fields-for