Я использую Rails 3 с ActiveRecord, и я не могу заставить его генерировать запрос, который я хочу, без вставки в него почти простого SQL.ActiveRecord left external join with and clause
Я просто хочу выполнить этот SQL-запрос (на самом деле запрос немного сложнее, но это действительно эта часть, которую я не могу получить).
SELECT DISTINCT users.*, possible_dates.*
FROM users
LEFT OUTER JOIN possible_dates
ON possible_dates.user_id = users.id
AND possible_dates.event_id = MY_EVENT_ID;
, который мне удалось с помощью
User.includes(:possible_dates)
.joins("LEFT OUTER JOIN possible_dates
ON possible_dates.user_id = users.id
AND possible_dates.event_id = #{ActiveRecord::Base.sanitize(self.id)}"
)
.uniq
, но я чувствую, что я пропускаю что-то, чтобы просто добавить AND
состояние LEFT JOIN с помощью методов запроса ActiveRecord. я также пытался сделать что-то вроде этого
User.includes(:possible_dates)
.where('possible_dates.event_id' => self.id)
.uniq
но это дает (как и ожидалось), запрос с пунктом WHERE
в конце и не п AND
я хочу на объединение.
Кстати, self
в двух фрагментах, приведенных выше, является экземпляром моего класса Event
.
Благодарим за помощь.
Можете ли вы дать попытку слияния? Добавьте '.merge (Возможные_данные.это ('possible_dates.event_id' => self.id))' – steakchaser
Спасибо за комментарий. Я просто попытался, и это дает точно такой же запрос, что и мой последний пример, используя '.where ('possible_dates.event_id' => self.id)'. –
Что-то вроде: User.includes (: possible_dates) .where ('possible_dates.event_id =? AND possible_dates.user_id =?', My_event_id, self.id) .uniq – stytown