Sql 基于ActiveRecord assoc和值获取对象集合
我有两个模型/表格,学校和评论。我想根据最少的评论数量,然后根据评论表上一列的平均值,得到一个学校对象的集合。目前,我的查询运行良好,返回所有学校,从平均值5.0到最后为空,如下所示:Sql 基于ActiveRecord assoc和值获取对象集合,sql,ruby-on-rails,ruby,activerecord,Sql,Ruby On Rails,Ruby,Activerecord,我有两个模型/表格,学校和评论。我想根据最少的评论数量,然后根据评论表上一列的平均值,得到一个学校对象的集合。目前,我的查询运行良好,返回所有学校,从平均值5.0到最后为空,如下所示: School.joins('LEFT JOIN reviews ON schools.id = reviews.school_id') .group('schools.id') .order('AVG(reviews.overall_experience_rating) DESC NULL
School.joins('LEFT JOIN reviews ON schools.id = reviews.school_id')
.group('schools.id')
.order('AVG(reviews.overall_experience_rating) DESC NULLS LAST')
但是,我希望这里有一个限制器,只有当它有15个或更多的评论时,才选择学校对象,比如:
where("school.reviews.count >= 15")
活动记录中两个模型之间的关联是一对多关系。有什么想法吗?我发现在ActiveRecord中使用
拥有正是我所需要的:
School.joins(:reviews)
.group('schools.id')
.having("COUNT(reviews) > ?", 15)
.order('AVG(reviews.overall_experience_rating) DESC NULLS LAST')
如果您正确设置了关系,请使您的联接看起来更漂亮:。联接(:reviews)
-rails将自动发挥作用