Wie füge ich mithilfe von Arel SQL-Abfragen mit 'oder' und 'und' Klammern hinzu?
Ich verwende Ruby on Rails 3.2.2 und möchte die folgende SQL-Abfrage generieren:
SELECT `articles`.* FROM `articles` WHERE (`articles`.`user_id` = 1 OR `articles`.`status` = 'published' OR (`articles`.`status` = 'temp' AND `articles`.`user_id` IN (10, 11, 12, <...>)))
Durch die NutzungArel diesen Weg
Article
.where(
arel_table[:user_id].eq(1)
.or(arel_table[:status].eq("published"))
.or(
arel_table[:status].eq("temp")
.and(
arel_table[:user_id].in(10, 11, 12, <...>)
)
)
)
es erzeugt die folgenden (Hinweis: Klammern stimmen nicht mit der ersten SQL-Abfrage überein):
SELECT `articles`.* FROM `articles` WHERE (((`articles`.`user_id` = 1 OR `articles`.`status` = 'published') OR `articles`.`status` = 'temp' AND `articles`.`user_id` IN (10, 11, 12, <...>)))
Schon seitMeiner Ansicht nach die letztere SQL-Abfrage "funktioniert" nicht wie die erste,Wie könnte ich Arel benutzen? (oder vielleicht noch etwas anderes)Also, um die SQL-Abfrage als erste zu generieren?
Update (nach Kommentaren)Da die obigen SQL-Abfragen "funktionieren", möchte ich dennoch die genaue SQL-Abfrage als erste in der Frage generieren (der Hauptgrund dafür ist, dass die erste SQL-Abfrage lesbarer ist als die zweite, da die erste Abfrage man verwendet weniger und "explizite" Klammern), wie könnte ich das mit Arel machen?