[英]How can I create a select list with grouped hash array of hashes instead of ActiveRecord in Rails?
我試圖找出如何從具有哈希數組的哈希中顯示分組列表。 我正在從另一個api源獲取信息並轉換JSON,然后按區域分組。
@list ||= JSON.parse(@conn.get('/templates').body, symbolize_names: true)
@template_list = (@list.group_by {|k,v| k[:region]})
@template_list輸出如下所示。
{“ EMEA” => [{:id =>“ 1563”,:url =>“ https://website.com ”,:name =>“ TemplateNameA”,:region =>“ EMEA”,:another_key => “另一個值”,:contain_count => 0},{:id =>“ 7819”,:url =>“ https://website.com ”,:name =>“ TemplateNameB”,:region =>“ EMEA” ,:another_key =>“另一個值”,:contain_count => 0}],“ Central” => [{:id =>“ 421”,:url =>“ https://website.com ”,:name = >“ TemplateNameA”,:region =>“ Central”,:another_key =>“另一個值”,:contain_count => 0}],“ East” => [{:id =>“ 12”,:url =>“ https://website.com “,:name =>” TemplateName1“,:region =>” East“,:another_key =>”另一個值“,:contain_count => 0}]}}
經過幾次迭代后,我最接近期望結果的是<%= select_tag:template_id,grouped_options_for_select(@template_list)%>
這導致提取所有鍵/值對,而不是一個不錯的簡短列表。 我想要的輸出如下所示。
<optgroup label="East">
<option value="12">TemplateName1</option>
<option value="321">TemplateName2</option>
</optgroup>
<optgroup label="EMEA">
<option value="1563">TemplateNameA</option>
<option value="7819">TemplateNameB</option>
<option value="2367">TemplateNameC</option>
</optgroup>
<optgroup label="Central">
<option value="421">TemplateNameA</option>
</optgroup>
grouped_options_for_select需要一個類似於以下內容的哈希:
{
'group name 1': [
[select name, select value],
[select name, select value]
],
'group name 2': [
[select name, select value],
[select name, select value]
]
}
因此,我們只需要采用原始數據結構並將其轉換為以下格式:
@data = {"EMEA"=>[{:id=>"1563", :url=>"https://website.com", :name=>"TemplateNameA", :region=>"EMEA", :another_key=>"another value", :contain_count=> 0}, {:id=>"7819", :url=>"https://website.com", :name=>"TemplateNameB", :region=>"EMEA", :another_key=>"another value", :contain_count=>0}], "Central"=>[{:id=>"421", :url=>"https://website.com", :name=>"TemplateNameA", :region=>"Central", :another_key=>"another value", :contain_count=>0}], "East"=>[{:id=>"12", :url=>"https://website.com", :name=>"TemplateName1", :region=>"East", :another_key=>"another value", :contain_count=>0}]}
@options = {}
@data.each do |name,data|
@options[name] = data.collect do |x|
[x[:name], x[:id]]
end
end
這將遍歷所有原始哈希鍵,然后為每個數組元素創建一個新數組,僅保留名稱和ID。
然后將@options傳遞給grouped_options_for_select,您應該可以經營業務!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.