主动管理员按二级协会排序

时间:2015-08-14 01:36:15

标签: ruby-on-rails ruby associations activeadmin associated-sorting

我有三个型号。 makesmodels表格中都有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 个答案:

答案 0 :(得分:0)

我们假设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排序