1

我正在尝试我的第一次加入,它生成的 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 中这并不奇怪:/

4

1 回答 1

2

假设您已经获取了用户:

user.recipients.unread

收件人关联已将收件人限制为该用户。有一个单独的范围对我来说没有意义。

- 编辑

如果您的用户模型has_many :recipients定义了关联,则此方法有效。

于 2011-05-03T04:21:47.887 回答