Арел: Как правильно объединить несколько условий с ИЛИ? - PullRequest
10 голосов
/ 07 июня 2010

В моем приложении на Rails я перебираю массив, чтобы создать список условий, к которым должен присоединиться OR.Ниже приведено основное описание того, как я в настоящее время делаю это.

conditions = nil
set.each do |value|
  condition = value.to_condition
  conditions = conditions ? conditions.or(condition) : condition
end

Очевидно, что это не красиво, но я все еще не до конца знаю свой путь вокруг Арела.Предлагает ли он какой-либо лучший способ присоединения к набору динамически генерируемых условий?

Ответы [ 3 ]

12 голосов
/ 07 сентября 2010

Это идеально подходит для inject, который даст вам однострочник, который вы можете использовать и в другом месте: conditions = set.inject { |conds, cond| conds.or(cond) }, который даже может быть написан: set.inject(&:or), что очень приятно.

1 голос
/ 17 июля 2012

Существует также полезный плагин для этого.

condition_helper

Это помогает создавать сложные условия.

0 голосов
/ 22 августа 2010

Я думаю, что это в основном так. Я бы инициализировал условия для базового объекта, чтобы избежать троичного:

scope = Article
set.each{|v| scope = scope.or(v.to_condition)}
...