如何选择其相关记录没有特定属性值的记录?

时间:2015-07-22 18:49:09

标签: ruby-on-rails-4 rails-activerecord

我想选择所有没有关联帖子的用户,标题是' 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)

2 个答案:

答案 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')")