использовать пользовательские методы для сортировки в рельсах .sort! - PullRequest
0 голосов
/ 12 сентября 2011

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

    articles = Article.all
    documents = Document.all
    @feeds = (articles + documents).sort! { |b, a| a.created_at <=> b.created_at }

Но давайте скажем, что люди могут публиковать документы так, что последним действием в документе является атрибут create_at впоследний пост.Тогда я хотел бы отсортировать так:

 @feeds = (articles + documents).sort! { |b, a| a.latest_activity <=> b.latest_activity }

И я бы определил latest_activity в моделях:

В Document.rb

 def latest_activity
      self.posts.last.created_at
 end

в Article.rb

 def latest_activity
     self.created_at
 end

Это не работает .. локальный сервер выдает следующую ошибку:

 undefined method `created_at' for nil:NilClass

Как мне выполнить сортировку, необходимую здесь?

1 Ответ

1 голос
/ 13 сентября 2011

Я бы обычно использовал "updated_at", а не create_at.Затем в вашем классе Post:

class Post < ActiveRecord::Base
  belongs_to :document, :touch => true
end

Это означает, что при сохранении сообщения он обновит столбец updated_at документа.

Затем, чтобы упростить:

articles = Article.all
documents = Document.all
@feeds = (articles + documents).sort_by(&:updated_at)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...