動的条件のWhere句を少しきれいに作るwith Ez Where Two
そもそもこのプラグインどのくらい使われているのかわからないけれど、
フォームから動的条件で検索をかけるというケースは普通にあるはずで。
で、ばか正直に書いていると作るあたりはこんな風になっている。
で、さすがに1つ2つ程度ならまだしも、実際には現在13項目あったわけです。
cond = Condition.new :articles do
if params[:article][:id]
id == params[:article][:id]
end
if params[:article][:subject]
subject == params[:article][:subject]
end
end
さすがになんとかしたい。rhtmlのパラメータ名称とテーブルのカラム名が
一致していることが条件になるが、こんな風に突っ込めばとりあえずANDで
ひっつけていくことは可能になる。
とりあえずこの例でいうArticleテーブルの構成が変わってもここはそのまま
cond = Condition.new
params[:article].each{|key, value| cond << "#{key} = #{value}" if value.empty?}
で対応出来るし、表示項目のrhtmlとの流れさえ意識しておけば一応これで
AND検索に関してはいけるだろう。ORを含めたらどうなるってのはそれぞれの
項目で何を選ばれたかによってメソッドを変更する必要がある。これは
さすがにワンライナーでは書けそうにない気がするけど、要望があれば対応しよう。