Arel: Как чисто объединяться с несколькими условиями с OR?
В моем приложении Rails я прохожу через массив, чтобы создать список условий, к которым должен быть присоединен OR. Ниже приведен основной поток того, как я это делаю в настоящее время.
conditions = nil
set.each do |value|
condition = value.to_condition
conditions = conditions ? conditions.or(condition) : condition
end
Очевидно, это не красиво, но я до сих пор не совсем знаю дорогу по Арелю. Предлагает ли он лучший способ OR-объединения в набор динамически генерируемых условий?
Ответы
Ответ 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)}