我想选择所有没有关联帖子的用户,标题是' test123'。以下语法不起作用:
User.includes(:posts).where.not(posts: { title: 'test123' })
如何选择关联帖子没有特定标题的用户?
更新
最初,我试图找出我认为我遇到问题的地方,但我想展示最能反映我正在做的事情的查询。问题仍然在于where.not,从句。当我知道有包含其他标题的帖子的记录时,它会返回一个空数组。
User.where("users.created_at >= ? and users.created_at <= ?", 1.month.ago.utc, 1.week.ago.utc)
.where(active: true)
.includes(:comments)
.where('comments.id is not null')
.includes(:posts)
.where.not(posts: { title: 'test123'} )
.references(:posts)
答案 0 :(得分:0)
来自API Doc
如果您想为所包含的模型添加条件,则必须这样做 明确地引用它们
因此以下查询将起作用
User.includes(:posts).where.not(posts: { title: 'test123' }).references(:posts)
答案 1 :(得分:0)
我认为问题在于使用Active Record Query Syntax执行内部和外部联接。此查询存在问题:
User.includes(:posts).where.not(posts: { title: 'test123' })
是仅在检索到具有关联帖子的所有用户记录之后评估,where.not(posts:{title:'test123'}) - 留下没有相应的所有其他用户记录帖子。我想要一个不排除没有帖子的用户的查询。
我就这样做了:
User.where("users.id NOT IN (SELECT DISTINCT(user_id) from posts where title = 'test123')")