Подтвердить что ты не робот

Arel: Как чисто объединяться с несколькими условиями с OR?

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

Для этого есть также полезный плагин.

conditions_helper

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

Ответ 3

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

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