0

当你有一部分

/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")PostsContollerand<%= render @comments %>而不是<%= @post.comments %>,但我很好奇是否有更常见的方法来做到这一点。

提前致谢!

4

2 回答 2

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')
于 2013-01-19T01:59:48.857 回答
1

像在模型中设置的顺序一样render @post.comments.paginate(params[:page])工作吗?例如。

class Post < ActiveRecord::Base
  has_many :comments, order: 'created_at DESC'
end
于 2013-01-19T02:35:08.210 回答