【发布时间】:2015-07-14 16:23:43
【问题描述】:
我有以下 AR/SQL 代码返回以下值:
Post.joins(:comments).uniq.count # => 20
当我将它细化如下时,我得到了我期望的减少值:
Post.joins(:comments).uniq.where('comments.user_id = ?', user.id).count # => 9
因此,当我运行相同的代码但匹配被否定时,我希望得到相反的一堆记录 - 即计数 11。但我得到的是:
Post.joins(:comments).uniq.where('comments.user_id != ?', user.id).count # => 20
我想说,基本上是“查找所有带有 cmets 的帖子,其中评论是由 . 以外的人发表的。”
我是否误解了否定在 SQL 中的行为方式?
我应该指定我使用的是 Rails 3.2.18,它似乎不允许我在 Rails 指南中找到的 where.not() 语法(它会引发 ArgumentError: wrong number of arguments (0 for 1))。
【问题讨论】:
-
嗯,我在 SQL 中一直使用
<>进行否定。我不知何故觉得!=不起作用。 -
Rails 3 上的仅供参考的指南位于 here。
标签: sql ruby-on-rails ruby ruby-on-rails-3 activerecord