Я использую Ruby on Rails 3.2.2 и хочу сгенерировать следующий 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, <...>)))
Используя Arelследующим образом
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, <...>)
)
)
)
он генерирует следующее ( примечание: скобки не совпадают с первым 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, <...>)))
Поскольку я думаюпоследний SQL-запрос не «работает» первый, как я мог использовать Arel(или, может быть, что-то еще) чтобы сгенерировать SQL-запрос как первый?
Данный SQL запросы выше «работают» одинаково, но я все же хотел бы сгенерировать точный SQL-запрос как первый в вопросе (основная причина сделать это в том, что первый SQL-запрос более читабелен, чем второй, поскольку в первом есть использовал меньше и «явные» скобки), как я мог сделать это с помощью Arel ?