2015-03-29 4 views
-3

У меня есть модели Тема и сообщение.Сортировочные элементы в Ruby on Rails

routes.rb 

resources :topics do 
    resources :posts 
end 

Я хочу отсортировать темы по created_at Последнее сообщение в этом разделе.

@topics = Topic.order(???) 

Update:

Topic.includes(:posts).order("posts.created_at desc") 

Этот код большая работа, но как заказать новую тему без сообщений? Новая тема без сообщений должна быть первой в верхней части.

ответ

1

Предположив, что есть «has_many» отношения между темой и сообщением, что-то подобное должно работать:

Topic.includes(:posts).order("posts.created_at desc") 

Будьте осторожен, что наличие вложенных маршрутов (как есть) не означает, что ничего об отношениях между модели.

+0

Ошибка: mysql2 :: Ошибка : Неизвестный столбец 'posts.created_at' в 'order clause': SELECT 'themes'. * FROM' themes' ORDER BY posts.created_at de sc –

+0

да, в модели Тема has_many: posts в моде Post принадлежит_to: тема –

+0

Обновлено соответственно – Martin

0

Вот так я предпочитаю использовать

Topic.includes(:posts).merge(Post.order(created_at: :desc)) 

И если у вас есть области, которые были бы лучше

class Post < ActiveRecord::Base 
    scope :ordered_by_creation, -> { order(created_at: :desc) } 
end 

Запрос стал бы

Topic.includes(:posts).merge(Post.ordered_by_creation)