按方法对Rails模型进行排序

时间:2014-11-17 19:09:38

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

我有一个question模型,其中包含votescomments

我在名为question的{​​{1}}模型上定义了一个方法,该方法只是engagement_score

votes + comments

如何按class Question < ActiveRecord::base has_many votes has_many comments def engagement_score self.votes.count + self.comments.count end end 排序所有questions

engagement_score不起作用,因为Question.all.order("engagement_score ASC")不是engagement_score中的列。

2 个答案:

答案 0 :(得分:2)

如果您不介意不返回数组,那么您可能只需使用sort_by。

类似

Question.all.sort_by { |question| question.engagement_score } 

答案 1 :(得分:0)

您可以执行类似

的操作
Question.includes(:comments, :votes).order_by_engagement_score

def self.order_by_engagement_score
  sort_by |ques|
   -(ques.votes.length + ques.comments.length)
  end
end