Вопрос

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