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

Sql 有没有一种方法可以将where和where.not合并到Rails中的一个条件中?,sql,ruby-on-rails,activerecord,orm,Sql,Ruby On Rails,Activerecord,Orm,我有一个事件模型,里面有用户id。我想选择此模型的所有对象,具有指定的user\u id,但不包括特定事件。所以我可以用这样的查询: Event.where(user_id: user.id).where.not(id: id) 但是我可以将这两个where函数合并为一个吗 我知道,例如,如果我需要查找具有指定的ids和user\u ids的事件,我可以这样做: Event.where(user_id: user_id).where(id: id) 我可以使用一个,其中调用而不是两个来压缩它

我有一个
事件
模型,里面有
用户id
。我想选择此模型的所有对象,具有指定的
user\u id
,但不包括特定事件。所以我可以用这样的查询:

Event.where(user_id: user.id).where.not(id: id)
但是我可以将这两个
where
函数合并为一个吗

我知道,例如,如果我需要查找具有指定的
id
s和
user\u id
s的事件,我可以这样做:

Event.where(user_id: user_id).where(id: id)
我可以使用一个
,其中
调用而不是两个来压缩它:

Event.where(user_id: user_id, id: id)

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

试试这个,你可以创建两个作用域,然后在链中调用

scope :with_user, ->(user) {user_id: user.id}

scope :excluded_event, ->(event_ids) { where.not(id: event_ids) }

Event.with_user(user).excluded_event(event_ids)
你可以收集

Event.where(user_id: 1) + Event.where.not(id: 2)
或者拒绝一个参数

Event.where(user_id: 1).where.not(id: 2)

您可以按照以下内容添加where和where.not:

Event.where(
  "user_id = ? AND id != ?",
  user.id,
  id
)
所以如果用户id=1,id=2
这将返回用户id为1而没有id为2的记录:)

True'rubysh'answer=)