Как в rails организовать сортировку вывода?

программирование ruby ruby on rails rails Rails ActiveRecord

Вот имеется следующий код, задача в том, чтобы выводить ноды не как они записаны в базе, по id, а по номеру последнего комментария в ноде. Получить дату-я получил, а вот как их теперь по ней сортировать, я не могу понять.

%table
%tr
%th Number
%th Head
%th Body
%th Picture
%th Date
%th
%th

- @nodes.each do |node|
%tr
- @l_comm = node.comments.last.created_at # Дата последнего коммента
%td= node.id
%td= node.head
%td= node.body
%td
= link_to( image_tag( node.picture_url(:thumb).to_s), node.picture_url) if node.picture?
%td= node.created_at.strftime("%d %b %Y, %H:%M")
%td Comments:
%td= node.comments.size
%td= link_to 'Reply', node
%br
rails 3.1, ruby 1.8.7

Примечание:
Кстати, проблема решилась несколько неожиданным способом - при записи даты комментария в дополнительное поле в таблице нод записи на выводе выстраиваются так, как нужно. Не знаю, правда, насколько это надежно

Примечание:
>>если у вас есть cache_counter для комментариев то можно выводить ноды по node.updated_at
Да, действительно, как-то такой вариант (весьма логичный) прошел мимо. Его и используем :)
Ответы:
- @nodes.sort! {|x,y| x.comments.last.created_at <=> y.comments.last.created_at }
- @nodes.each do |node|
только одно но, сортировка поломается если в node.comments =>  nil
т.к у nil нет метода last
ваш код тоже не будет работать если node.comments => nil
нужно
   - @l_comm = node.comments.last.created_at if node.comments # Дата последнего коммента
нашел верное решение
всеравно не то, если нарушит порядок выборки nodes, а это возможно
в общем случае тоже не очень хорошо :(
я еще подумаю
если у вас есть cache_counter для комментариев то можно выводить ноды по node.updated_at
в вашем случае это случайность


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.