문제

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