Ruby on rails 根据记录的属性在下拉列表中拆分选项组?
我试图在下拉列表中将我的选项组分为两类:未分配和已分配 例如,如果这是我的数据(unassigned=false): 我希望它输出以下内容:Ruby on rails 根据记录的属性在下拉列表中拆分选项组?,ruby-on-rails,ruby,select,Ruby On Rails,Ruby,Select,我试图在下拉列表中将我的选项组分为两类:未分配和已分配 例如,如果这是我的数据(unassigned=false): 我希望它输出以下内容: <select name="city[country_id]"> <optgroup label="Unassigned"> <option value="2">Steven</option> <option value="3">Mary</option> &l
<select name="city[country_id]">
<optgroup label="Unassigned">
<option value="2">Steven</option>
<option value="3">Mary</option>
</optgroup>
<optgroup label="Assigned">
<option value="1">Bob</option>
<option value="4">John</option>
</optgroup>
</select>
史蒂文
玛丽
上下快速移动
约翰
我一直在尝试使用rails中的集合\u select helper以及组helpers,但都没有成功。有什么rails助手方法可以做到这一点吗?如果没有,我如何生成此结果。您可以为此使用。它将根据块产生的值在散列中对元素进行分组。我不知道您使用什么数据结构来存储数据,我假设我的答案是散列
data = {
Bob: true,
Steven: false,
Mary: false,
John: true
}
Hash[data.group_by { |_,v| v ? 'Assigned' : 'Unassigned' }.map { |k,v| [k, v.map(&:first)] }]
# => {"Assigned"=>[:Bob, :John], "Unassigned"=>[:Steven, :Mary]}
或者,您可以使用,它根据传递的块的返回值将可枚举项划分为true
数组和false
数组:
# Partition data based on their 'assigned' value
data.partition { |name, assigned| assigned }.map { |partition| Hash[partition] }
# => [{:Bob=>true, :John=>true}, {:Steven=>false, :Mary=>false}]
# Partition data based on their 'assigned' value
data.partition { |name, assigned| assigned }.map { |partition| Hash[partition] }
# => [{:Bob=>true, :John=>true}, {:Steven=>false, :Mary=>false}]