1
我正在尝试我的第一个连接,它生成的sql非常奇怪。Rails 3 ActiveRelation在连接中添加“为空”...我如何阻止它这样做?
我有一个收件人属于一个用户。我想查询到用户的所有收件人还没有阅读并不会被删除:
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”?这不应该在那里:(
我试着搜索谷歌,它实际上真的很神奇,95%的例子没有谈论连接。我发现使用&语法的几个例子,这个文档实际上相当糟糕,其实很奇怪,
无论如何,我无法得到这个工作,当你开发软件的时候绝对不是一个好日子。 19年,并不能让sql加入到一张桌子上:(我可以用15个连接在sql中编写查询,手动没有问题,我想这是你在学习新框架的时候付出的代价,这并不奇怪尽管在休眠:/
我想我想通了。由于导轨的默认设置,其中一名同事是'用户',而不是'接受者'。所以那个伎俩。我习惯于在一个地方看到所有的映射配置......所以习惯于rails实际上是一个有点挑战,因为它分散在不同的地方(迁移和2个模型,而不是1个文件)。无论如何,你的上面的代码将不幸工作,因为我想要的私人消息,而不是收件人对象:/所以我必须按照我这样做的方式。 – egervari 2011-05-03 05:26:12
提及关于消息/简化模型代码的问题会给你更好的答案。 ;) – Heikki 2011-05-03 05:33:07
是的,我的坏。这个范围只是达到目的的手段 - 它不应该是最终的查询 - 只是更大查询的一部分。 – egervari 2011-05-03 05:49:03