enum geo_type: {circle: 1, rectangle: 2, polygon: 3}
というタイプごとに settings というテーブルにレコードがあるのですが
対応するレコードがない場合もあります
例えば 1 3 だけレコードを持っていて 2 のレコードがない場合に Setting.all をよぶと
[Setting(geo_id=1), Setting(geo_id=3)] という配列になるのですが
レコードが存在ない場合は Setting.new をよんで
[Setting(geo_id=1), Setting.new(geo_id=2), Setting(geo_id=3)]
のような配列を geo_types の順番どおりに作るにはどうしたらいいでしょうか
@settings = Setting.all if geo_types.length != @settings.length then tmp = [] geo_types.each {|k,v| tmp << (@settings.find{|r| r.geo_type == k} || Setting.new(geo_type: v)) } @settings = tmp end
というような足りない要素がある場合に配列を作り変えるメソッドをかいているのですが
このあとさらに条件を追加する必要ができたので
スコープでうまくかく方法はないでしょうか
[1,2,3] という配列と Left Join ができればすむ気がするのですが
配列と Left Join するようなクエリってかけるのでしょうか
使うときに null チェックして null だったら new するのでもいいのですが
render @settings
と collection で渡せたほうが view がきれいなので
できればコントローラで null じゃないデータを作ってしまいたいです
あなたの回答
tips
プレビュー