如何从数据库中创建 Rails 中的多个项目 select 列表

How do I create a multiple item select list in Rails from database

这是我的代码 - 它工作正常,但我希望能够 select 多个组织,而这个 select 只允许我选择一个。

<%= f.collection_select :id, 
                        Organisation.order(:Company_Name), 
                        :id, 
                        :Company_Name, 
                        options = {include_blank: "Select an Organisation"}, 
                        html_options = {:onchange => 'broadcast_dropdown_change(document.getElementById("broadcast_country_id"), document.getElementById("broadcast_organisation_id"))'} %>

请帮助我解决这个问题,并提供有关如何改进此代码的任何建议。

谢谢。

我认为您只需要添加 html 选项 multiple: true :) 希望这样可以轻松完成!

如果不是,您将需要确保允许的参数与传递的参数相匹配 - 可能是 JSON 编码的选项数组 - 并在数据库中适当地解析/保存它们。

我在评论中链接到您的 post 的副本中提供了更多示例。让我知道您的进展情况,如果需要,我会提供更多信息!


根据您的评论进行更新,这是一个示例:

<%= f.collection_select :id, 
                        Organisation.order(:Company_Name), 
                        :id, 
                        :Company_Name, 
                        { include_blank: "Select an Organisation" }, 
                        onchange: 'broadcast_dropdown_change(document.getElementById("broadcas‌​t_country_id"), document.getElementById("broadcast_organisation_id")', 
                        multiple: true %>

这里有几个注释:

  • 此方法采用的最后两个参数用于 optionshtml_optionsinclude_blank: ... 是前者,最后两个参数是后者
  • 您不需要将这些哈希分配给变量。第一个散列需要括号以将其与第二个散列区分开来,尽管最终散列是隐式的,因此不需要括号(尽管您可以使用它们,如果您觉得它更容易阅读,即)

    { onchange: 'broadcast_dropdown_change(document.getElementById("broadcas‌​t_country_id"), document.getElementById("broadcast_organisation_id")', 
      multiple: true }
    
  • 快速查看一下您是如何命名变量的 - 花时间正确格式化它们是值得的 - 例如,:Company_Name 应该始终是小蛇形 :company_name

希望对您有所帮助 - 再次提醒我,让我知道您的进展情况:)