如果你有部分
/app/views/posts/comments/_comment.html.erb ,
执行以下操作
<%= render @post.comments %>
迭代@ post.comments集合,如
@post.comments.each do |comment|
自动,即使您没有将集合传入部分。
但是,由于对象按created_at排序的方式,这将在另一个方向上呈现注释。
我想改变方向:通过created_at DESC
以另一种方式对集合进行排序,然后迭代评论集合。
我愿意
@comments = @post.comments.paginate(:page => params[:page], :per_page => 10, :order => "created_at")
和PostsContoller
而不是<%= render @comments %>
中的 <%= @post.comments %>
,但我很好奇是否有更常见的方法可以做到这一点。
提前致谢!
答案 0 :(得分:1)
你肯定想这样做:
@comments = @post.comments.order("created_at ASC").paginate(page: params[:page])
而不是改变Rails助手的工作方式!你为什么这样做?
您可以定义注释在关联上的排序方式。在Post模型中:
has_many :comments, order: "comments.created_at ASC"
您还可以设置默认范围以更改默认情况下排序注释的方式。
在模型中:
default_scope order('created_at ASC')
答案 1 :(得分:1)
像render @post.comments.paginate(params[:page])
之类的东西是否有效,您的模型中是否设置了顺序?例如
class Post < ActiveRecord::Base
has_many :comments, order: 'created_at DESC'
end