Я пытаюсь написать именованную область, которая упорядочит мой класс «Products» на основе среднего значения «Review». Базовая модель выглядит так
Product < ActiveRecord::Base
has_many :reviews
Review < ActiveRecord::Base
belongs_to :product
# integer value
Я определил следующую именованную область действия в Product:
named_scope :best_reviews,
:select => "*, AVG(reviews.value) score",
:joins => "INNER JOIN (SELECT * FROM reviews GROUP BY reviews.product_id) reviews ON reviews.product_id = products.id",
:group => "reviews.product_id",
:order => "score desc"
Кажется, это работает правильно, за исключением того, что он добавляет значение «оценка» в выборке к моим экземплярам Продукта, что вызывает проблемы, если я пытаюсь их сохранить, и заставляет сравнения возвращать false (@BestProduct! = Product.best_reviews .first, потому что Product.best_reviews.first имеет оценку = что угодно).
Есть ли лучший способ структурировать named_scope? Или способ заставить Rails игнорировать дополнительное поле в select?