如何通过活动记录查询检查Rails 5中是否不存在记录?

时间:2017-07-26 10:22:16

标签: sql ruby-on-rails postgresql activerecord

我有一篇文章模型和评论模型。如何使用活动记录获得没有任何评论的文章列表?

模型列:

文章:O(n)(有很多评论)

评论:body:stringbody:string(属于文章)

3 个答案:

答案 0 :(得分:2)

如果您想使用单个查询获取结果并希望结果为activerecord关系,请使用:

Article.where('id NOT IN (SELECT DISTINCT(article_id) FROM comments)')

答案 1 :(得分:1)

这是相同的,但更多的是铁路方式

Article.where.not('id IN (SELECT DISTINCT(article_id) FROM comments)')

答案 2 :(得分:0)

尝试下面的代码来获取所有没有评论的文章:

Article.includes(:comments).where.not(comments: {article_id: nil})

OR

data = []

Article.all.each do |a|
  data << a if a.comments.blank?
end

puts data

OR

ids = Comment.all.pluck(:article_id)

data = Article.where.not(id: ids)