Rails]改变'render'方法迭代集合的方式

时间:2013-01-19 01:41:56

标签: ruby-on-rails render loops

如果你有部分

/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 %>,但我很好奇是否有更常见的方法可以做到这一点。

提前致谢!

2 个答案:

答案 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