0

我有一个学校和结果模型,其中结果属于学校,学校每年都有结果。每个结果都有一个字段:score,我试图按分数对每个“结果”进行排名,但仅限于每年。所以每年不同的年份会有不同的排名。

1) 获得此排名的最佳方法是什么?

我想到的一种方法是每 10 分钟(例如)运行一次 cron 作业来更新排名

update_rank.rake

task :build => :environment do
  Result.where(year: year).desc(:score).each_with_index do |result, position|
    result.update_attribute(:rank, position + 1)
  end
end

我在这里有一个问题:

2) 我怎样才能对每个不同的年份进行排名?我可以做类似下面的事情,但它似乎有点笨重,我还能做些什么吗?

task :build => :environment do

  eachyear = (1990..(Time.now.year)).to_a

  eachyear.each do |year|

    Result.where(year: year).desc(:score).each_with_index do |result, position|
      result.update_attribute(:rank, position + 1)
    end

  end

end
4

1 回答 1

0

如果你想每十分钟更新一次排名,有一个很棒的 gem,叫做“无论何时”,它会为你处理 cron。 https://github.com/javan/无论何时

创建一个定义特定时间范围的期限或年份模型可能是有意义的。这将使您的计算更容易,并且考虑到学校通常有不同的时间表,也可以更好地扩展。

一个问题是,您需要确保在当前学期结束时生成一个新学期/年。

例子:

  class School
     has_many :terms
     has_many :results
  end


  class Term
    belongs_to :school
    has_many :results

    field :start_date
    field :end_date
  end

  class Result
     belongs_to :term
     belongs_to :school
  end

显然,您需要考虑更多信息......但希望这会有所帮助。

于 2013-08-20T23:52:13.220 回答