ruby-on-rails – 如何自动排序Rails中的has_many关系?

这似乎是一个很简单的问题,但我还没有看到它回答任何地方。

如果您有:

class Article < ActiveRecord::Base 
  has_many :comments 
end 
class Comments < ActiveRecord::Base 
  belongs_to :article 
end

为什么不能用这样的命令排序评论:

@article.comments(:order=>"created_at DESC")

命名范围工程,如果你需要引用很多,甚至人们做这样的东西:

@article.comments.sort { |x,y| x.created_at <=> y.created_at }

但有事告诉我应该更简单。我缺少什么?

您可以通过has_many本身的选项指定裸集合的排序顺序:

class Article < ActiveRecord::Base 
  has_many :comments, :order => 'created_at DESC'
end 
class Comment < ActiveRecord::Base 
  belongs_to :article 
end

或者,如果你想要一个简单的,非数据库排序方法,使用sort_by

article.comments.sort_by &:created_at

收集这个与添加ActiveRecord添加的排序方法:

article.comments.find(:all, :order => 'created_at DESC')
article.comments.all(:order => 'created_at DESC')

您的里程可能会有所不同:上述解决方案的性能特征将根据您首先获取数据的方式以及用于运行应用程序的Ruby而发生巨大变化。

http://stackoverflow.com/questions/738971/how-do-i-automatically-sort-a-has-many-relationship-in-rails

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:ruby-on-rails – 如何自动排序Rails中的has_many关系?