Я использую Django, где вы можете запускать несколько методов фильтрации в запросах, т.е. Item.all.filter(foo="bar").filter(something="else")
.
Однако это не так просто сделать в Rails. Item.find(:all, :conditions => ["foo = :foo", { :foo = bar }])
возвращает массив, который не будет работать:
Item.find(:all, :conditions => ["foo = :foo", { :foo = 'bar' }]).find(:all, :conditions => ["something = :something", { :something = 'else' }])
Итак, я решил, что лучший способ "стека" фильтров состоит в том, чтобы изменить массив условий, а затем запустить запрос.
Итак, я придумал эту функцию:
def combine(array1,array2)
conditions = []
conditions[0] = (array1[0]+" AND "+array2[0]).to_s
conditions[1] = {}
conditions[1].merge!(array1[1])
conditions[1].merge!(array2[1])
return conditions
end
Использование:
array1 = [ "foo =: foo", {: foo = 'bar'}] array2 = [ "something =: something", {: something = 'else'}] условия = объединение (array1, array2) items = Item.find(: all,: conditions = > условия)
Это работает очень хорошо. Однако я хочу иметь возможность комбинировать произвольное количество массивов или в основном сокращать для записи:
conditions = combine(combine(array1,array2),array3)
Может ли кто-нибудь помочь с этим? Спасибо заранее.