Я привык к 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'}]
массив2 = ["что-то =: что-то", {: что-то = 'еще'}]
условия = объединить (массив1, массив2)
items = Item.find (: все,: условия => условия)
Это сработало довольно хорошо. Однако я хочу иметь возможность комбинировать произвольное количество массивов или в основном сокращение для записи:
conditions = combine(combine(array1,array2),array3)
Может кто-нибудь помочь с этим? Заранее спасибо.