Активная запись: использовать условия хеширования в предложении on - PullRequest
2 голосов
/ 02 февраля 2012

Пытаюсь выяснить, как сделать запрос через Active Record и при этом сохранить свое достоинство. Конечный результат в sql должен выглядеть так:

... left join works on clients.id = works.client_id and works.performed_on >= '2012-01-21' and works.performed_on <= '2012-01-28'...

Если бы диапазон дат был в предложении WHERE , я мог бы использовать такие условия хеширования:

where(:performed_on => (date1..date2))

Но мне нужен диапазон в предложении ON . Есть идеи получше, чем мучительно писать все это?

На мой взгляд, что-то вроде следующего было бы идеально:

Client.joins('left join works').on('clients.id' => 'works.client_id', 'works.performed_on' => (date1..date2))

1 Ответ

2 голосов
/ 02 февраля 2012

Вы можете отфильтровать результат в предложении WHERE вместо предложения ON.

Client.joins(:works).where(:works => {:performed_on => (date1..date2)})

Если вам необходимо отфильтровать результат в предложении ON, сначала создайте JOIN sql:

join_sql = Client.send(:sanitize_sql_for_conditions, [
   "LEFT JOIN works ON clients.id = works.client_id AND (
      works.performed_on >= ? AND works.performed_on <= ? )", 
   date1, date2])

Client.joins(join_sql) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...