Rails 3: Внутреннее соединение с ассоциациями - PullRequest
1 голос
/ 20 мая 2011

Я немного застрял в проблеме с запросом Active Record. Я хотел бы сделать левое соединение вместо внутреннего соединения в запросе, но результаты метода joins возвращают только внутреннее соединение.

Entry.
  joins(:measurements => :measurement_type).
  sum(:value, :conditions => ['name = ?','Calories'])

Хитрость в том, что :measurements имеет отношение принадлежат к :measurement_type, где находится столбец имени.

Прямо сейчас это возврат сумм только для пользователей, у которых есть food_posts. Цель - вернуть суммы всем пользователям. Пользователи, у которых нет поста с едой, будут иметь нулевую сумму.

Я пробовал поискать в Google и искать другие сообщения здесь, но не нашел ответа. Есть предложения?

Также я использую SQLite в своей среде разработки и Postgresql для производства.

Ответы [ 2 ]

4 голосов
/ 20 мая 2011

Если вы хотите сделать левое соединение вместо внутреннего, вам нужно использовать пользовательские 'sql фрагменты'

В вашем примере,

relation.joins("left join measurements on measurements.id = measurement_type.measurements_id")

Или что-то в этом роде в зависимости от вашей настройки.

Этот учебник довольно ясно подводит итог.

1 голос
/ 21 мая 2011

Драгоценный камень MetaWhere имеет поддержку внешних соединений, помимо многих других достоинств:

https://github.com/ernie/meta_where

...