Jak poprawnie dodać nawiasy do zapytań SQL za pomocą klauzul „lub” oraz „i” za pomocą Arel?
Używam Ruby na Rails 3.2.2 i chciałbym wygenerować następujące zapytanie SQL:
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, <...>)))
UżywającArel tą drogą
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, <...>)
)
)
)
generuje następujące (Uwaga: nawiasy nie są takie same jak pierwsze zapytanie SQL):
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, <...>)))
OdMyślę drugie zapytanie SQL „nie działa” jako pierwsze,jak mogę korzystać z Arel (lub może coś innego)aby wygenerować zapytanie SQL jako pierwsze?
Aktualizacja (po komentarzach)Powyższe zapytania SQL „działają” tak samo, ale nadal chciałbym wygenerować dokładne zapytanie SQL jako pierwsze w pytaniu (głównym powodem tego jest to, że pierwsze zapytanie SQL jest bardziej czytelne niż drugie, ponieważ w pierwszym jeden jest używany w mniejszym i „jawnym” nawiasie), jak mogę to zrobić za pomocą Arel?