我有类似的查询:
SomeModel.includes(:some_join_table).where(name: name, some_join_table: {*** STUFF ***})
some_join_table中的有一个来自SomeModel的相关id的字段和一个不允许的布尔列。如何让该查询返回name == name的每条记录,而不包括id == id和disallowed == true的记录?
答案 0 :(得分:0)
不包括id == id和disallowed == true
的记录
您可以将此条件转换为:x.id <> y.id
或disallowed = false
。
不确定Ruby语法,但此查询会按照您的要求执行(只要定义disallowed
NOT NULL
- 我假设id
是PK(不能是空):
SELECT m.*
FROM SomeModel m
JOIN some_join_table j USING (name)
WHERE m.id <> j.id OR NOT j.disallowed;
答案 1 :(得分:0)
只需添加更多where子句
SomeModel.includes(:join_table).where(:name => name).
where.not(:join_table => {:id => 10})
例如
Post.includes(:comments).where(:subject => "Hello").
where.not(:comments => {:id => 10})