Упорядочение по двум полям, одно из которых создается_ В In Rails - PullRequest
0 голосов
/ 04 января 2012

Это дополнительный вопрос к Индивидуальному, эффективному, сложному упорядочению в рельсах 3

Я бы хотел разработать эффективный метод упорядочения для имеющейся у меня модели рельсов.Предположим, что я сохранил оценку для всех объектов в поле с именем «популярность».Если бы я хотел отсортировать по этому рейтингу, я бы сделал:

  Model.order('popularity ASC')

Как бы я упорядочил по перекосу для созданного в?Есть ли способ, возможно, преобразовать метку времени создания в целочисленное значение, а затем отсортировать по популярности - create_at, чтобы оценки более старых объектов со временем снижались?IE что-то вроде:

  Model.order('popularity-integerize(created_at) ASC')

Итак: как я могу это сделать, и это эффективно?

Ответы [ 2 ]

0 голосов
/ 11 января 2012

При расчете вашей популярности вы можете просто учитывать время создания;)

0 голосов
/ 04 января 2012

В вашей модели вы можете сделать что-то вроде ...

class Model < ActiveRecord::Base
  def decaying_popularity
    popularity + created_at.to_i # created_at is larger for newer creations.
  end                            # you'll obviously need to edit the formula you use. 

  def self.order_by_decaying_popularity
    models = self.all
    models.sort {|a,b| a.decaying_popularity <=> b.decaying_popularity }
  end
end

Когда вы хотите вызвать это в вашем контроллере:

Model.order_by_decaying_popularity

Это должно играть хорошос другими пунктами, также:

Model.where(:author_id => 1).order_by_decaying_popularity
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...