Как правильно добавлять скобки в SQL-запросы с предложениями «или» и «и» с помощью Arel?

Я использую 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 ?

6
задан user12882 25 June 2012 в 14:38
поделиться