Я использую множество пользовательских условий в ActiveRecord, но мне нравится упаковывать их в массив массивов условий, а затем объединять их, используя? значение позволяет AR автоматически их очищать:
conditions = Array.new
conditions << ["name = ?", "bob"]
conditions << ["(created_at > ? and created_at < ?)", 1.year.ago, 1.year.from_now]
User.find(:first, :conditions => combine_conditions(conditions))
def combine_conditions(somearray) # takes an array of condition set arrays and reform them into a AR-compatible condition array
conditions = Array.new
values = Array.new
somearray.each do |conditions_array|
conditions << conditions_array[0] # place the condition in an array
# extract values
for i in (1..conditions_array.size - 1)
values << conditions_array[i]
end
end
[conditions.join(" AND "), values].flatten
end