【问题标题】:How to change and improve a select_tag in a rails form so that it returns several values如何更改和改进 rails 表单中的 select_tag 以使其返回多个值
【发布时间】:2016-08-16 21:19:54
【问题描述】:

我是编程新手,在创建Remission 对象时遇到了一个复杂表单(对我来说)的问题。这个减免has_many Units。我有一个工作表单版本,但我想改进它。在我的实际版本中,您需要通过从所有单位(Unit.all)列表中的复选框选择它们来选择您想要的单位。它工作正常,但问题是单元是批量创建的,因此每种单元类型都有多个副本。我现在要做的是只显示每种不同类型的单元。每个单元类型都有一个唯一的product_code,所以我可以通过:

@units = Unit.where(sold:false).group(:product_code)

现在我的问题是我想将checkbox_tag 更改为select_tag,这允许我选择每种类型的单位数量以将它们添加到减免中。此选择标签应为从 0 到每种单位类型的单位数量。我对此有一个想法,但我需要一些我无法完成的修复:

<% @units.each do |unit| %>
  </td>
    <%= select_tag "quantities[]",options_for_select(0..Unit.where(product_code: unit.product_code).count) %> 
  </td>
<% end %>

可以帮我解决这个问题,它返回与 Unit 类型的 product_code 关联的所选数量的值,以便我可以使用该信息在控制器中创建 remission。在我学习的过程中,欢迎提出任何建议。

提前致谢。

【问题讨论】:

  • 嗨,欢迎来到堆栈溢出。调试代码的口头描述非常困难。您能否编辑您的问题并添加您需要帮助的相关部分(例如选择框),包括您所做的任何尝试(即使它不起作用)以及您在尝试各种方法时遇到的任何错误。这样我们就可以准确地看到您正在尝试做什么,而不是为您自己从头开始设计它。然后我们可以帮助你:) 注意:不要将代码放在 cmets 中(例如这里),因为格式很糟糕......一定要编辑你的问题以添加新代码:)
  • 哈哈 - 你在我打字的时候编辑过 :D 仍然 - 越多越好!你想让他们选择一个整数吗?
  • 谢谢!等我回家的时候再编辑。是的,数量需要是一个整数,因为它对应于通过要添加的每个单元对象中的 remission_id 添加到缓解中的单元对象的数量。

标签: ruby-on-rails forms activerecord


【解决方案1】:

要在下拉列表中构建一组数字 - 看起来您可以通过删除 options_for_select 来做到这一点,例如:

<%= select_tag "quantities", 0..Unit.where(product_code: unit.product_code.count %>

但如果您对所有下拉菜单使用相同的字段名称,则每个表单只会返回一个结果(最后一个将覆盖前一个)。所以你需要使用单位给它一个唯一的字段名称,例如

<% @units.each do |unit| %>
  <td>
    <%= select_tag "quantities[#{unit.product_code}]", 0..Unit.where(product_code: unit.product_code %>
  </td>
<% end %>

那么你可能会在 params 中得到这样的东西:

params[:quantities]
=> {'abc123' => 4, 'def456' => 1}

【讨论】:

  • 感谢您的回答!我正在学习自己编程,有时文档似乎有点过于抽象。它使用代码 .我只剩下一个问题,希望你能帮助我。现在我得到一个带有代码和我选择的数量的散列,问题是它还包含所有带有值的值:'code' => 0 以及我留下的数量为 0 的单位。是否有快速解决方案只获取我更改的选择?
  • 顺便说一句,在最后部分使用没有计数的代码会产生错误 no valid range。
  • 是否使用 params[:quantities].delete_if {|k,v| 处理生成的 hast v == "0"} 有意义吗?
  • 是的,如果您查看 select_tag 上的他的文档:apidock.com/rails/ActionView/Helpers/FormTagHelper/select_tag,您会看到其中一个选项是提示。如果您添加提示 - 除非有人从提示中更改它,否则它不会传递值。
  • 非常感谢您的帮助。我设法解决了我所有的错误。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
  • 2021-05-14
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多