ActiveRecordでパラメータでconditions条件を追加しやすいヘルパ
会社のプロジェクトで使われているActiveRecordの関数を紹介。
lib/active_record/active_record_helper.rb
module ActiveRecordHelper def flatten_conditions(conditions, op = "and") return nil if conditions.empty? ps = [] condition = conditions.collect do |c| next if c.size < 1 ps += c[1..(c.size)] "( #{c[0]} )" end.delete_if { |c| c.blank? }.join(" #{op} ") [condition, ps].flatten unless condition.empty? end end class ActiveRecord::Base include ActiveRecordHelper end
これで、params[]の値によってconditionに条件を加えたり加えなかったりするプログラムの時、
簡単に条件を作る事ができます。
@condition = [] @condition << [" prefecture_id = ? ", params[:prefecture] ] if params[:prefecture] @condition << [" sex = ? ", params[:sex] ] if params[:sex] @users = User.find(:all, :conditions => @conidition)
複数条件を書く時面倒なんで、助かっています。
パラメータが無く、@conditions = [] のみの場合であれば、nilが返って条件無くなるので。