Ruby on Railsのgroup_byでハッシュにデータをぶら下げる

プログラミング、サーバー、ネットワーク、IT用語、ハマったときのトラブルシューティングなど様々なIT関連の話題をひたすら書いていく技術ブログです。

2017年4月2日日曜日

Ruby on Railsのgroup_byでハッシュにデータをぶら下げる


Railsでハッシュのキーにカテゴリ名(例えば料理の種類)を設定して、その各カテゴリに紐づくデータをぶら下げたい時があります。例えばviewでテーブルを作成するときのループ処理などです。例えば

{
"category1" => [data1,data2,data3]
"category2" => [data4,data5]
"category3" => [data6,data7,data8]
}

といったデータを作成して多重ループにすると、下記のようなカテゴリごとのテーブルを作成できます。htmlはこのような感じです。

モデルはこのような感じです。


テーブル構成はfoodsテーブルとfood_categoriesテーブルの間に多対1の関係があります。各メニュー(foodsテーブル)は1つのカテゴリ(food_categoriesテーブル)に属し、反対に1つのカテゴリは複数のメニューを持ちます。

html側の2行目の@foodsにハッシュが入っていると思ってください。それをeachでループすると第一引数のcategoryにはcategory1、category2、category3が順々に入ります。第二引数のfoodsには第一引数がcategory1のときは[data1,data2,data3]が入り、category2のときは [data4,data5]、category3のときは[data6,data7,data8]が入ります。

10行目のfoodsをさらにeachで回すと、categoryがcategory1のときは[data1,data2,data3]のデータがループで回るためcategory1に関連するデータのみのテーブルリストが完成します。category2、category3も同様です。

これでカテゴリごとのテーブルリストが完成しました。






最近の投稿