我有一个模型Thing
,其方法为popularity_rating
。每件事都有很多UpVotes和DownVotes,这些用于计算评级。我试图按照评级的降序列出我主页上的所有内容,但我收到此错误:
NoMethodError in HomePageController#home
undefined method `sort' for #<Class:0x007f98edd7d330>
控制器/ home_page_controller.rb:
class HomePageController < ApplicationController
def home
@topten = Thing.sort { |a, b| a.popularity_rating.to_f <=> b.popularity_rating.to_f }
end
end
模型/ thing.rb
# ...
has_many :up_votes, as: :voteable
has_many :down_votes, as: :voteable
def popularity_rating
100 * ( (self.up_votes.count.to_f) / ( (self.up_votes.count.to_f) + ( self.down_votes.count.to_f ) ) )
end
模型/ up_votes.rb
belongs_to :voteable, polymorphic: true
答案 0 :(得分:2)
模型上没有方法sort
,特别是在那里没有方法sort_by { |t| t.rating.to_f }
。这就是你如何处理Ruby数组,即便如此@topten = Thing.order(rating: :desc).limit(10)
也是如此。
你想要的是:
rating
这假设{{1}}是您数据库中的一列,而不是您所描述的方法。如果需要计算此值,请在模型中执行此操作,并每次将其保存到数据库中。加载所有内容,排序和丢弃除十条记录以外的所有记录都非常慢。