OR-Operator in WHERE-Klausel mit Arel in Rails 4.2

Der folgende Code hat ein gültiges @ erstelwhere -Klausel mit einemOR operator in Rails 4.1

MyModel.where(
  MyModel.where(attribute1: 1, attribute2: 2).where_values.reduce(:or)
)

Was entspricht in etwa der SQL

select * from my_models where (attribute1 = 1 OR attribute2 = 2)

In Rails 4.2 generiert derselbe Code eine SQL-Abfrage mit fehlenden Werten für die Bindungsparameter

select * from my_models where attribute1 =  OR attribute2 =  

... und generiert einen Fehler aufgrund der fehlenden Werte für die gebundenen Werte.

Was ist der entsprechende Code inRails 4.2 um eine gültige Abfrage mit einem OR-Operator zu generieren?

Bearbeiten

Die Lösung erfordert einArel::Nodes::Node abgeleitetes Objekt, das verwendet werden soll, damit es selbst mit anderen Bedingungen über AND- und OR-Gruppierungen kombiniert werden kann.

rel = MyModel.where(attribute1: 1, attribute2: 2)
conditions = [rel.where_values.reduce(:or).to_sql, *rel.bind_values.map(&:last)]

MyModel.where(conditions)

Dasconditions var muss eine Ableitung von @ seArel::Nodes::Node. Die obige Lösung funktioniert für einfache Abfragen, aber für kompliziertere Abfragen,conditions muss ein Arel-Knoten sein, um an eine endgültige Abfragemethode übergeben zu werden.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage