Rails 4错误:未定义的方法' sort'

时间:2014-11-11 19:35:31

标签: ruby-on-rails ruby sorting ruby-on-rails-4

我有一个模型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

1 个答案:

答案 0 :(得分:2)

模型上没有方法sort,特别是在那里没有方法sort_by { |t| t.rating.to_f }。这就是你如何处理Ruby数组,即便如此@topten = Thing.order(rating: :desc).limit(10) 也是如此。

你想要的是:

rating

这假设{{1}}是您数据库中的一列,而不是您所描述的方法。如果需要计算此值,请在模型中执行此操作,并每次将其保存到数据库中。加载所有内容,排序和丢弃除十条记录以外的所有记录都非常慢。