2013-08-15 2 views
0

У меня есть модель школы и результата, результаты которой принадлежат школам, а школы имеют результаты за каждый год. Каждый результат имеет поле: оценка, и я стараюсь оценивать каждый результат по его оценке, но только за каждый год. Таким образом, для каждого разного года будут разные рейтинги.Рейтинг с монгодом

1) Каков наилучший способ достичь этого рейтинга?

Один подход, я думал, это запустить хрон каждые 10 минут (например), что обновляет ранг

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 

ответ

0

Если ваше желание обновить ряды через каждые десять минут, есть большой камень называется Всякий раз, когда что будет обрабатывать хрон для вас. https://github.com/javan/whenever

Может иметь смысл создать модель Term или Year, которая определяет определенный временной интервал. Это упростит ваши вычисления, а также уменьшит уровень использования данных школ, как правило, будет иметь разные графики.

Один из них - это то, что вам нужно будет создать новый термин/год, когда текущий заканчивается.

Пример:

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 

Очевидно, что совсем немного больше информации вам нужно будет рассмотреть ... Но, надеюсь, что помогает.