如何重新排列评论顺序?

时间:2014-09-14 20:03:58

标签: html ruby-on-rails for-loop ruby-on-rails-4

我正在制作评论系统,这有点搞砸了。它列出了从旧到新的评论,当我需要它以相反的顺序(最新的)时。我该怎么做?

代码:(/ app / views / comment / _comment.html.erb)

<%= div_for comment do %>
        <p>
                <strong>
                        Posted <%= time_ago_in_words(comment.created_at) %> ago
                </strong>
                <br/>
                <%= comment.body %>
        </p>
<% end %>

编辑: 这是评论控制器:

class CommentsController < ApplicationController
    def create
        @post = Post.find(params[:post_id])
        @comment = @post.comments.create(params[:comment].permit(:commenter, :body))
        respond_to do |format|
            format.html { redirect_to @post }
            format.js
        end
    end
end

2 个答案:

答案 0 :(得分:1)

在评论模型中,添加:

default_scope -> { order('created_at DESC') }

这样,@post.comments将被正确订购。

答案 1 :(得分:0)

使用默认范围很容易让人感到困惑,因为如果我尝试Comment.order(:id),我实际上会得到select * from comments order by created_at desc, id asc这可能需要一段时间来调试,想知道为什么他们不按ID排序,并避免你需要做一些像Comment.unscoped.order(:id)这样的事情,如果你问我这很烦人,我宁愿做一个只有当我知道我需要它才能调用的范围

scope :chronological_order -> { order(created_at: :desc) }

然后叫它

Comment.chronological_order

当然,你可以选择你喜欢的任何范围名称。