我有一个Event
模型,里面有user_id
。我想选择此模型的所有对象,具有指定的user_id
但不包括特定事件。所以我可以用这样的查询来做到这一点:
Event.where(user_id: user.id).where.not(id: id)
但是我可以将这两个where
函数组合成一个吗?
我知道如果我需要查找具有指定id
和user_id
s的事件,我可以这样做:
Event.where(user_id: user_id).where(id: id)
我可以使用一个where
调用来压缩它,而不是两个:
Event.where(user_id: user_id, id: id)
但如果我使用where
和where.not
,我可以做同样的事情吗?
答案 0 :(得分:1)
您可以按照以下方式编写,以添加where.not:
Event.where(
"user_id = ? AND id != ?",
user.id,
id
)
所以如果user_id = 1且id = 2 比这将返回user_id 1且没有id 2的记录:)
答案 1 :(得分:0)
试试这个,你可以创建两个范围,然后在链中调用
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)
答案 2 :(得分:0)
你可以收集
Event.where(user_id: 1) + Event.where.not(id: 2)
或拒绝参数
Event.where(user_id: 1).where.not(id: 2)