モデルで取得したデータをハッシュで受け取りたい場合の処理についてです。
確認環境はrails 4.0.0
実際のコード
(例) AreaモデルのデータをHash[code] = name の構造で取得したい
【Areaテーブル】
id | code | name
1 | HK | 北海道
2 | AO | 青森
3 | IW | 岩手
~
【コード】
get_area = Hash[Area.all.map { |item| [item.code, item.name] }]
【期待結果】
get_area
{“HK” => “北海道”, “AO” => “青森”, “IW” => “岩手” }
簡単な解説
下記のような配列をHashで括るとハッシュ型に変換されます。
[[“1”, “a”], [“2”, “b”], [“3”, “c”]]
↓
Hash[[[“1”, “a”], [“2”, “b”], [“3”, “c”]]]
↓
{“1” => “a”, “2” => “b”, “3” => “c”}
Hashで括るために取得したオブジェクト(Area.all)をmapを使って適切な配列型に変換します。
Area.all.map { |item| [item.code, item.name] }
↓
[[“HK”, “北海道”], [“AO”, “青森”], [“IW”, “岩手”]]
※参考記事
『railsでActiveRecordの結果をHashに変換する方法』
http://qiita.com/t4kmru/items/2a2b58bb801929b5e67c