有没有一种方法可以将 where 和 where.not 组合成 Rails 中的一个条件?

ser*_*off 5 sql orm activerecord ruby-on-rails

我有一个Event模型,user_id里面有。我想选择该模型的所有对象,其中指定user_id但不包括特定事件。所以我可以用这样的查询来做到这一点:

Event.where(user_id: user.id).where.not(id: id)
Run Code Online (Sandbox Code Playgroud)

但是我可以将这两个where功能合二为一吗?

我知道,例如,如果我需要查找具有指定ids 和user_ids 的事件,我可以这样做:

Event.where(user_id: user_id).where(id: id)
Run Code Online (Sandbox Code Playgroud)

我可以使用一次where调用而不是两次来压缩它:

Event.where(user_id: user_id, id: id)
Run Code Online (Sandbox Code Playgroud)

where但如果我使用and ,我可以做同样的事情where.not吗?

Bre*_*chi 5

你可以聚集

Event.where(user_id: 1) + Event.where.not(id: 2)
Run Code Online (Sandbox Code Playgroud)

或拒绝参数

Event.where(user_id: 1).where.not(id: 2)
Run Code Online (Sandbox Code Playgroud)


Dar*_*ala 5

您可以按如下方式编写来添加 where 和 where.not :

Event.where(
  "user_id = ? AND id != ?",
  user.id,
  id
)
Run Code Online (Sandbox Code Playgroud)

因此,如果 user_id = 1 且 id = 2,则将返回 user_id 为 1 而没有 id 2 的记录:)