Rails 4:在嵌套循环

时间:2015-10-12 22:40:13

标签: ruby-on-rails loops sorting ruby-on-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>

这很好用,除了一个小细节:目前,评论按日历排序,然后按帖子排序(根据上面的代码,这是有道理的。)

相反,我希望按照时间顺序排序,即最近的第一个,,无论哪个日历或帖子属于

有没有办法实现这个目标?

2 个答案:

答案 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时间戳订购评论