Operador OR na cláusula WHERE com Arel no Rails 4.2
O código a seguir construiu um válidowhere
cláusula com umOR
operador no Rails 4.1
MyModel.where(
MyModel.where(attribute1: 1, attribute2: 2).where_values.reduce(:or)
)
O que é aproximadamente equivalente ao SQL
select * from my_models where (attribute1 = 1 OR attribute2 = 2)
No Rails 4.2, o mesmo código gera uma consulta SQL com valores ausentes para os parâmetros de ligação
select * from my_models where attribute1 = OR attribute2 =
... e gera um erro devido aos valores ausentes para os valores associados.
Qual é o código equivalente emRails 4.2 gerar uma consulta válida com um operador OU?
Editar:
A solução requer umaArel::Nodes::Node
objeto derivado a ser usado para que ele próprio possa ser combinado com outras condições via agrupamentos AND e OR.
rel = MyModel.where(attribute1: 1, attribute2: 2)
conditions = [rel.where_values.reduce(:or).to_sql, *rel.bind_values.map(&:last)]
MyModel.where(conditions)
oconditions
var deve ser um derivado deArel::Nodes::Node
. A solução acima funciona para consultas simples, mas para consultas mais complicadas,conditions
deve ser um Nó Arel para ser passado para um método de consulta final.