Я привык к Django, где вы можете запускать несколько методов фильтрации на запросах, то есть Item.all.filter(foo="bar").filter(something="else")
.Фильтрация запросов ActiveRecord в рельсах
Однако это не так-то просто сделать в 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 =}] array2 = [ "что-то =: что-то», {: что-то = 'Else'}] условия = сочетающие (array1, array2) элементы = Item.find (: все,: условия => условия)
Это работает очень хорошо. Однако я хочу, чтобы иметь возможность объединить произвольное количество массивов, или в основном обсчитывать для записи:
conditions = combine(combine(array1,array2),array3)
Может кто-нибудь помочь с этим? Заранее спасибо.
Да, это именно то, что я хочу. Я наблюдал за скринкастом, и это имело для меня общий смысл. Но как только я активировал код, я получил сообщение об ошибке, указав, что named scope - это неопределенный метод. Затем я заметил, что я работал с Rails 1.8, поэтому я обновил рельсы до 2.3.что-то и по-прежнему получаю ту же ошибку .... я знал, что имена областей слишком хороши, чтобы быть правдой:/ – user94154
Если вы заморозили Rails, то ваш код по-прежнему использует предыдущую версию Rails. Rails 1.8 никогда не существовал, поэтому вы должны понимать Ruby 1.8. rails -v - это команда, которая расскажет вам, какая версия Rails существует в командной строке. script/about расскажет вам больше о среде вашего приложения. –
колоритный рубиновый скрипт/о не был признан. Что означает замороженное значение в терминах Rails? – user94154