在我的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>
这很好用,除了一个小细节:目前,评论按日历排序,然后按帖子排序(根据上面的代码,这是有道理的。)
相反,我希望按照时间顺序排序,即最近的第一个,,无论哪个日历或帖子属于。
有没有办法实现这个目标?
答案 0 :(得分:1)
您可以按created_at
日期时间订购:
def index
@user = current_user
@calendars = Comment.where("user_id like ?", @user.id).order("created_at DESC")
end
答案 1 :(得分:1)
您可能会对评论进行新的ActiveRecord查询,因为您通过日历获取评论,我会这样做。
@comments = Comment.joins(post: :calendar).where(calendars: {id: @calendars.pluck(:id)}).distinct.order(created_at: :desc)
这将找到属于日历的所有评论,并根据created_at时间戳订购评论