Ruby on rails 基于a的排序有很多关系

Ruby on rails 基于a的排序有很多关系,ruby-on-rails,ruby,sorting,Ruby On Rails,Ruby,Sorting,项目位于 及 我有一个具有以下模型的资源审查网站 class Resource < ActiveRecord::Base has_many :reviews class Review < ActiveRecord::Base belongs_to :resource 私有方法 def sort_column Resource.column_names.include?(params[:sort]) ? params[:sort] : "name"

项目位于

我有一个具有以下模型的资源审查网站

class Resource < ActiveRecord::Base

  has_many :reviews


class Review < ActiveRecord::Base

  belongs_to :resource
私有方法

  def sort_column
    Resource.column_names.include?(params[:sort]) ? params[:sort] : "name"
  end

  def sort_direction
    %w[asc desc].include?(params[:direction]) ? params[:direction] : "asc"
  end
application.rb

  def sortable(column, title = nil)
    title ||= column.titleize
    css_class = column == sort_column ? "current #{sort_direction}" : nil
    direction = column == sort_column && sort_direction == "asc" ? "desc" : "asc"
    link_to title, {:sort => column, :direction => direction}, {:class => css_class}
  end
index.html.erb


  • 您显然需要ActiveRecord类的order方法

    Review.order("score")
    
    有一种方法也可能对你有所帮助

    希望这有帮助:)

    编辑:

    class Resource < ActiveRecord::Base
      scope :ordered, :order => "some_col DESC"
    end
    
    class Review < ActiveRecord::Base
      has_many :resources
    end
    
    review.resources # uses the default ordering
    review.resources.ordered # uses the "some_col DESC" ordering
    
    类资源“一些列描述”
    结束
    类回顾
    由于您希望根据资源的评审分数对一组资源进行排序,并且每个资源有许多评审分数,因此需要确定评估这些资源的方法。要做到这一点,可以考虑分数的含义以及为什么要为用户排序

    一个合乎逻辑的选择可能是将资源的评审分数相加,以创建资源的总分数。它的工作原理如下(假设
    @resources
    是一组资源活动记录):

    最高评级将是最后一个要素:

    highest_score_resource = @resources.sort_by( &:aggregate_score ).last
    
    在资源模型中,定义
    聚合\u分数

    def aggregate_score
      self.reviews.select { |r| r.score }.sum(&:score)
    end
    
    如果您知道分数从不为零,那么您可以:

    def aggregate_score
      self.reviews.sum(&:score)
    end
    

    如果您决定使用其他方法来计算资源的总分,您可以在
    aggregate\u score

    中更改算法如果每个资源都有许多评论,您希望如何按
    review.score
    排序,因为每个评论都有很多评论?也许是通过总结?我需要根据评论订购资源。哦,对不起,我没有正确理解问题,请检查我编辑的答案。。。这应该是可用的,请点击接受按钮,如果是:)这里是一个。。。可能会有帮助too@Tyler,我认为当一个资源有多个评论,每个评论都有一个分数时,您仍然需要定义如何处理排序。您想如何聚合它们以形成可排序属性?@mbrach我不确定该如何做。最后一件事是我想将其变成一个按钮,您会如何做?@Tyler,很高兴这有帮助。按钮完全是另一回事。单击按钮时,是否希望视图中发生一些事情?@mbatch是的,我目前使用资源名称、创建时间和成本等按钮对其进行排序。我需要再加一篇评价最高的评论。在你的帮助下,默认情况下,我的评分最高。我将包含资源控制器中的索引操作。@泰勒,我不确定您当前是如何执行的,但我想它可能与您在其他两种情况下执行的方式类似,
    create_at
    cost
    。我在第一篇文章中介绍了该代码。我总是有一个db列来排序。
    highest_score_resource = @resources.sort_by( &:aggregate_score ).last
    
    def aggregate_score
      self.reviews.select { |r| r.score }.sum(&:score)
    end
    
    def aggregate_score
      self.reviews.sum(&:score)
    end