Сортировка списка тем по дате created_at их последнего сообщения

Делаем приложение для форума.

class Topic < ActiveRecord::Base
  belongs_to :user
  belongs_to :board
  has_many :posts, :inverse_of => :topic
end

class Post < ActiveRecord::Base
  belongs_to :user
  belongs_to :topic, :inverse_of => :posts
end

При просмотре доски я хочу, чтобы список тем располагался в порядке последнего сообщения тем, созданного по дате. Но я не могу понять, как написать это так, чтобы его можно было понять с помощью метода order().

В идеале было бы просто так

@topics = @board.topics.order("topic.posts.last.created_at")

Все, что я пишу, возвращает ошибки о том, что столбец не существует.

Важно отметить, что это @topics будет передано в разбиение на страницы, поэтому я не могу просто извлечь результаты @board.topics, упорядочить их самостоятельно, а затем разбить на страницы из-за того, что разбиение на страницы требует определенного типа коллекции.


person Adam    schedule 15.08.2014    source источник


Ответы (1)


  1. Всегда прикрепляйте сообщение об ошибке.
  2. использовать сортировку:

    @topics = @board.topics.sort{|t| t.posts.last.created_at}

person Easy peasy    schedule 15.08.2014
comment
Ваш метод вернул ошибку: CACHE (0.1ms) SELECT "posts".* FROM "posts" WHERE "posts"."topic_id" = ? ORDER BY "posts"."id" DESC LIMIT 1 [["topic_id", 3]] *** ArgumentError Exception: comparison of ActiveSupport::TimeWithZone with 0 failed Кроме того, я уже пытался сделать что-то подобное, и это не сработало, потому что после сортировки разбиение на страницы полученного отсортированного списка приводит к следующей ошибке: *** NoMethodError Exception: undefined method paginate' for #‹Array:0xb571f63c›`. - person Adam; 16.08.2014
comment
из-за этой ошибки попробуйте добавить require 'will_paginate/array' в свой контроллер - person Easy peasy; 16.08.2014