2015-10-12 4 views
1

В моем Rails 4 приложения, у меня есть следующие модели:Rails 4: сортировка элементов в хронологическом порядке, в вложенном цикле

class User < ActiveRecord::Base 
    has_many :administrations 
    has_many :calendars, through: :administrations 
end 

class Calendar < ActiveRecord::Base 
    has_many :administrations 
    has_many :users, through: :administrations 
    has_many :posts 
    has_many :comments, through: :posts 
end 

class Administration < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :calendar 
end 

class Post < ActiveRecord::Base 
    belongs_to :calendar 
    has_many :comments 
end 

class Comment < ActiveRecord::Base 
    belongs_to :post 
    belongs_to :user 
    delegate :first_name, to: :user, prefix: true 
end 

В моих Calendar#Index зрении, мне нужно, чтобы отобразить список всех комментариев (от все сообщения и все календари) пользователя.

Итак, я обновил свой Calendar#Index контроллер следующим образом:

def index 
    @user = current_user 
    @calendars = @user.calendars.all 
end 

И, на мой Calendar#Index зрения, я написал следующий код:

<table id="my_todo_table"> 

    <% @calendars.each do |calendar| %> 

    <% calendar.comments.each do |comment| %> 

     <tr> 

     <td><span class="glyphicon glyphicon-calendar" aria-hidden="true"></span> <%= link_to calendar.name, calendar_path(calendar.id) %></td> 
     <td><span class="glyphicon glyphicon-th-list" aria-hidden="true"></span> <%= comment.post.subject %> </td> 
     <td><span class="glyphicon glyphicon-user" aria-hidden="true"></span> <%= comment.user.first_name %></td> 
     <td><span class="glyphicon glyphicon-comment" aria-hidden="true"></span> <%= comment.body %></td> 

     </tr> 

    <% end %> 

    <% end %> 

</table> 

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

Вместо этого, я бы хотел, чтобы у нас были отсортированы в хронологическом порядке, т. Е. Самые последние сначала первые, независимо от того, какой календарь или сообщение принадлежит.

Есть ли способ достичь этого?

ответ

1

Вы можете заказать по created_at DateTime так:

def index 
    @user = current_user 
    @calendars = Comment.where("user_id like ?", @user.id).order("created_at DESC") 
end 
+0

Спасибо за ваш ответ. Это будет заказывать мои комментарии? Или мои календари? –

+0

Это закажет ваши календари. Это то, что вы ищете? Вам нужно будет заказать что-нибудь на основе календарей, сообщений или комментариев. – Cyzanfar

+0

Нет, я не хочу заказывать календари. Я хочу заказать комментарии. –

1

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

@comments = Comment.joins(post: :calendar).where(calendars: {id: @calendars.pluck(:id)}).distinct.order(created_at: :desc) 

Найдет все комментарии, которые принадлежат к календарю и упорядочить комментарии по created_at штамп времени