I have a 2 models in Rails 4

 course.rb
 has_many :reviews

 review.rb
 belongs_to :course

What is the best way to scope only the courses which have been reviewed? Here are two ways:

 1. scope :with_reviews, -> { joins(:reviews).where(:reviews => { :id => !nil }) }

counter_cache: true in review.rb and

 2. scope :with_reviews, -> { where('reviews_count > ?', 0) }

Is there another better way to do so?

Thx

有帮助吗?

解决方案

try this

Course.joins(:reviews).group('reviews.course_id').having('count(reviews.id) > 0')

其他提示

scope :with_reviews, -> { joins(:reviews).select("DISTINCT courses.*")}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top