** Отредактировано для большей понятности **
** Редактирование переименовано в Документ **
Я хочу, чтобы все пользовательские документы документа с записями на них были предоставлены данным пользователем, и если этот пользователь не проголосовали за какие-либо документы, я все равно хочу получить все документы без голосов. Для egzample:
+------------+--------------+------+
|document.par1|document.par2| vote |
+------------+--------------+------+
| 2 | z | y |
| 3 | w | NULL |
| 4 | x | NULL |
+------------+--------------+------+
В Ruby on Rails, если я попробовал это:
я. попробуйте:
Document.
joins("LEFT JOIN `votes` ON `votes`.`v_id` = `document`.`id` AND `votes`.`giver_id` = ?", user_id).
where('document.creator_id = ?', user_id, .....).
select('votes.*', `document.param1')
я получил эту ошибку:
RuntimeError in UserDocumentsController#show
unknown class: Fixnum
II. вторая попытка:
Document.
joins("LEFT JOIN `votes` ON `votes`.`v_id` = `document`.`id`").
where('document.creator_id = ? AND `votes`.`giver_id` = ?', user_id, user_id, .....).
select('votes.*', `document.param1')
Возвращает только те записи, которые имеют голоса:
+-------------+-------------+------+
|document.par1|document.par2| vote |
+-------------+-------------+------+
| 2 | z | y |
+-------------+-------------+------+
Таким образом, отсутствует 2 записи.
** Обновлено, это решение работает **
III. Моя третья попытка, спасибо за помощь Mischa:
Document.
joins("LEFT JOIN `votes` ON `votes`.`v_id` = `document`.`id`").
where('document.creator_id = ? AND (`votes`.`giver_id` = ? OR `votes`.`giver_id` IS NULL)', user_id, user_id).
select('votes.*', `document.param1')
+-------------+-------------+------+
|document.par1|document.par2| vote |
+-------------+-------------+------+
| 2 | z | y |
| 3 | w | NULL |
| 4 | x | NULL |
+-------------+-------------+------+