Rails 3 ActiveRelation добавление «ноль» в объединение ... как мне остановить это от этого? - PullRequest
1 голос
/ 03 мая 2011

Я пробую свое первое соединение, и sql, который он генерирует, очень странный.

У меня получатель принадлежит пользователю. Я пытаюсь запросить всех получателей от пользователя, которые также не читаются и не удаляются:

scope :unread, where(:is_read => false).where(:is_deleted => false)
scope :unread_by_user_id, lambda { |id| unread.joins(:user).merge(User.by_id(id)) }

Это sql, который он генерирует:

SELECT `recipients`.* FROM `recipients` INNER JOIN `users` ON `users`.`id` IS NULL WHERE `recipients`.`is_read` = 0 AND `recipients`.`is_deleted` = 0 AND `users`.`id` = 475

Есть ли способ, которым я могу избавиться от "IS NULL"? Этого не должно быть: (

Я пытался найти в Google, и это действительно удивительно, что 95% примеров там не говорят о соединениях. Несколько примеров объединений, которые я нашел, используют синтаксис &, который стал устаревшим. Документация для этого на самом деле довольно плоха по сравнению с другими вещами. Очень странно.

В любом случае, я не могу заставить это работать. Это определенно плохой день, когда вы разрабатываете программное обеспечение в течение 19 лет и не можете получить sql для объединения в одну таблицу :( Я могу писать запросы в sql с 15 соединениями без проблем вручную. Думаю, это цена, которую вы платите иногда, когда вы проходите и изучаете новые фреймворки, это не так странно, хотя в Hibernate: /

1 Ответ

2 голосов
/ 03 мая 2011

Предполагается, что ваш пользователь уже получил:

user.recipients.unread

Ассоциация получателей уже ограничивает получателей этим пользователем. Для меня это не имеет смысла.

- редактировать

Это работает, если в вашей пользовательской модели определена ассоциация has_many :recipients.

...