为 f.select 表单助手设置分组选项

Setting up grouped options for the f.select form helper

我很好奇如何创建一个下拉菜单,其中包含在我的 Rails 应用程序中按类别分组的位置。

之前的建议是尝试使用 f.select_tag 和 grouped_options_for_select 表单助手。 这确实有效,但是当前端的用户选择一个位置时,请求没有传递给控制器​​,因此位置字符串没有显示在位置确认页面上...

阅读文档,如果我要对模型执行此操作,我将使用 f.select 表单助手,但是 我很想知道我是否可以创建分组选项使用此表单助手

下面是使用 f.select_tag 帮助器的代码(在苗条的模板视图中):

f.select_tag :location_id, grouped_options_for_select(grouped_locations_hash), { include_blank: true }, class: 'form-control'

使用上面的帮助程序,用户在前端选择的位置不会传递给控制器​​。

正在尝试使用 f.select 表单助手,

f.select :location_id, options_from_collection_for_select(locations_array, :id, :name), { include_blank: true }, class: 'form-control'

...正在传递用户选择,但是,下拉菜单没有将位置分组到类别中(我希望如此)。

来自社区的任何建议和/或参考资料??

非常感谢!

您可以映射集合,然后按数组中的值对其进行分组,例如

<%= f.select(:location_id, grouped_options_for_select(Location.all.map{|l| [l.name, l.category_name, l.id]}.group_by { |c| c[1] }), {include_blank: "Select one..."}, {:class => 'grouped_select',id:"location_grouped"}) %>

这将创建 select,按 category_name 分组。