我有三个型号。 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
这样的链完全有效
答案 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
排序