我正在制作评论系统,这有点搞砸了。它列出了从旧到新的评论,当我需要它以相反的顺序(最新的)时。我该怎么做?
代码:(/ 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
答案 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
当然,你可以选择你喜欢的任何范围名称。