# この辺はどのORMでも同じだけど 今回,複雑なSQL文を作る必要が出たのでその方法をまとめておく.
やりたいことは,以下のような感じ.よくあるたくさんの条件をORで繋いで検索する様なケース.
def hoge # 条件1の作成 # 条件2の作成 some_array.each do |h| # 条件3〜nの作成 end # 条件1〜nをORで接続してreturn endこれをやろうとして,
Hoge.where(CONDITION1).or(CONDITION2).or(CONDITION3)ということが出来れば良かったのだが,これはできない.正しくは,scopedを使って,
conds = Array.new h = Hoge.scoped conds << h.tables[:field_name].eq('HOGE') some_array.each do |c| conds << h.tables[:field_name].SOME_METHOD() end cond = nil conds.each do |c| if not cond cond = c else cond = cond.or(c) end end return HogeModel.where(cond)とやるといけた.
生成されるSQL文は「(((COND1 OR COND2) OR COND3) OR COND4)」という形式になるが,論理和演算なので括弧は特に気にしなくても良い. 結局このへんで3時間近くハマってしまった.Rails3系はまだ情報が少ないのが辛いなあ.
0 件のコメント:
コメントを投稿