Я пробую свое первое соединение, и 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: /