我无法使用rails 4.1.8从Postgre数据库中检索某些数据
考虑两个具有has_many关系的模型
class Post < ActiveRecord::Base
has_many :comments
end
和
class Comment < ActiveRecord::Base
belongs_to :post
end
评论的状态为approved
或censured
我想在Post模型self.all_comments_approved
我无法弄清楚如何获得仅批准所有评论的帖子。 我想写这样的东西(不是工作的例子):
def sef.all_comments_approved
joins(:comments).where("ALL(comments.state = 'approved')").references(:comments)
end
提前感谢您的任何帮助:)
答案 0 :(得分:1)
您可以尝试将joins
与group
和having
语句一起使用,但您获得的关系会非常脆弱(您将无法像以下那样轻松查询它你希望 - 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