Active Admin сортировка по ассоциации 2-го уровня

У меня есть три модели. И то и другое makes а также models стол есть name колонна внутри.

class Review < ActiveRecord::Base
    belongs_to :model
end

class Model < ActiveRecord::Base
    belongs_to :make
    has_many :reviews
end

class Make < ActiveRecord::Base
    has_many :models
end 

В Active Admin на главной странице я хочу отсортировать отзывы по марке и модели. Я выяснил, как отсортировать его по модели, потому что он имеет ключ reviews Таблица. Перепробовал много вещей. Ничто не работает для сортировки по имени. Я был в состоянии перечислить все же.

ActiveAdmin.register Review do
    column "Model", sortable: 'model_id' do |p|
        p.model.name
    end
    column "Make", sortable: 'make_id' do |review|
        review.model.make.name
    end
end

Работает только сортировка по названию модели. Я думаю, если я добавлю make_id в Reviews это будет работать, но кажется излишним, потому что цепочка review.model.make отлично работает

1 ответ

Скажем review это оценка от 1 до 5. Вам нужно будет вычислить среднее значение для каждого make,

Чтобы вычислить среднее значение для make, делать:

reviews_sum = 0
total_reviews = 0

make.models.each do |model|
  model.reviews.each do |review|
    reviews_sum += review
    total_reviews += 1
  end
end

Затем:

average_review = reviews_sum /  total_reviews.to_f # I am using to_f to convert total_reviews from integer to float. This way you can have a float result.

Я советую вам создать make_average_review(make_id, average_review)Таким образом, вы можете хранить / обновлять ваш средний обзор для каждого make а затем сортировать по make

Другие вопросы по тегам