Rails 3:如何获取所有帖子哪个ID不在给定列表中?

Mis*_*hko 6 activerecord ruby-on-rails active-relation ruby-on-rails-3

要获得publisher_id等于10,16或17的所有帖子,我会:

Post.where(:publisher_id => [10, 16, 17])
Run Code Online (Sandbox Code Playgroud)

我如何获得publisher_id 不等于10,16或17的所有帖子(即除了这三个之外的所有可能的ID)?

Che*_*ian 9

在rails 4中我们可以像下面这样做

Post.where.not(:publisher_id => [10, 16, 17])
Run Code Online (Sandbox Code Playgroud)

它将生成如下的SQL

SELECT "posts".* FROM "posts"  WHERE ("posts"."publisher_id" NOT IN (10, 16, 17))
Run Code Online (Sandbox Code Playgroud)


ron*_*ils 8

只需执行:

Post.where(["publisher_id NOT IN (?)", [10, 16, 17]])
Run Code Online (Sandbox Code Playgroud)

  • 我不确定为什么需要额外的`[]`.这很好用:`Post.where("publisher_id NOT IN(?)",[10,16,17])`.谢谢! (2认同)