在 has_many 关系上应用条件
Applying conditions on has_many relationship
我在使用 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
在此先感谢您的帮助:)
您可以尝试将 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
我在使用 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
在此先感谢您的帮助:)
您可以尝试将 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