在has_many关系上应用条件

时间:2015-01-08 10:56:18

标签: ruby-on-rails postgresql activerecord

我无法使用rails 4.1.8从Postgre数据库中检索某些数据

考虑两个具有has_many关系的模型

class Post < ActiveRecord::Base
  has_many :comments
end

class Comment < ActiveRecord::Base
  belongs_to :post
end

评论的状态为approvedcensured

我想在Post模型self.all_comments_approved

中编写一个方法

我无法弄清楚如何获得仅批准所有评论的帖子。 我想写这样的东西(不是工作的例子):

def sef.all_comments_approved
  joins(:comments).where("ALL(comments.state = 'approved')").references(:comments)
end

提前感谢您的任何帮助:)

1 个答案:

答案 0 :(得分:1)

您可以尝试将joinsgrouphaving语句一起使用,但您获得的关系会非常脆弱(您将无法像以下那样轻松查询它你希望 - pluck会完全摧毁它等等。)

解决此问题的方法是将其拆分为两个数据库调用:

def self.all_comments_approved
  non_approved_ids = joins(:comments).where.not(comments: {state: 'approved'}).uniq.pluck(:id)
  where.not(id: non_approved_ids)
end 
相关问题