Оператор ИЛИ в предложении WHERE с Arel в Rails 4.2
Следующий код создал действительныйwhere
оговорка сOR
оператор в Rails 4.1
MyModel.where(
MyModel.where(attribute1: 1, attribute2: 2).where_values.reduce(:or)
)
Что примерно эквивалентно SQL
select * from my_models where (attribute1 = 1 OR attribute2 = 2)
В Rails 4.2 тот же код генерирует SQL-запрос с пропущенными значениями для его параметров связывания
select * from my_models where attribute1 = OR attribute2 =
... и генерирует ошибку из-за пропущенных значений для связанных значений.
Что такое эквивалентный код вRails 4.2 создать правильный запрос с оператором ИЛИ?
Редактировать:
Решение требуетArel::Nodes::Node
производный объект, который будет использоваться таким образом, чтобы он сам мог быть объединен с другими условиями с помощью групп AND и OR.
rel = MyModel.where(attribute1: 1, attribute2: 2)
conditions = [rel.where_values.reduce(:or).to_sql, *rel.bind_values.map(&:last)]
MyModel.where(conditions)
conditions
var должен быть производным отArel::Nodes::Node
, Вышеупомянутое решение работает для простых запросов, но для более сложных запросов,conditions
должен быть узлом Arel для передачи в последний метод запроса.