【问题标题】:Rails, fields_for, merging recordsRails,fields_for,合并记录
【发布时间】: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]...)。您不应该首先手动遍历集合。只需将其传递给 &lt;%= fields_for :drinks, @drinks do |f| %&gt;... 的字段即可。
  • 谢谢马克斯。不一定明白。我需要在表格中发送一系列饮料。使用您的代码不会构建数组并仅发送表单的最后一杯。将我的表单视为要发送到控制器的饮料网格。

标签: ruby-on-rails forms fields-for


【解决方案1】:

我找到了在 [] 中设置 season_id 的解决方法:

<%= fields_for "drinks[#{season.id}]", record.drink do |f| %>

现在,我所有的饮料都是从表单发送的,即使是具有相同 ID 的饮料。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多