不推荐使用Rails 4的警告has_many

class RelatedList < ActiveRecord::Base extend Enumerize enumerize :list_type, in: %w(groups projects) belongs_to :content has_many :contents, :order => :position end 

当我尝试在控制台中创buildlogging时,我的Rails应用程序中会引发此警告。

弃权警告:您的RelatedList.has_many:内容声明中的以下选项已弃用::order。 请改用一个范围块。 例如,以下内容:has_many:spam_comments,conditions:{spam:true},class_name:'Comment'应重写为:has_many:spam_comments, – > {where spam:true},class_name:'Comment'。 (来自/Users/shivam/Code/auroville/avorg/app/models/related_list.rb:7)

看来Rails 4在模型中使用了新的:order语法,但我似乎无法在Rails Guides中find文档。

在Rails 4中:order已经被弃用,需要用lambda范围代替,如在问题中发布的警告中所示。 另一点需要注意的是,这个范围块需要在任何其他关联选项(如dependent: :destroy等)之前传递

试试这个:

 has_many :contents, -> { order(:position) } 

要指定顺序方向,例如@ joshua-coady和@wsprujitbuild议的ascdesc ,请使用:

 has_many :contents, -> { order 'position desc' } 

或者,使用哈希样式:

 has_many :contents, -> { order(position: :desc) } 

有关has_many活动logging范围的进一步参考。

我花了一段时间才弄清楚如何进行sorting和包括,最终我发现你把范围说明连锁在一起,

 has_many :things, -> { includes(:stuff).order("somedate desc") }, class_name: "SomeThing" 

只是想我会补充说,如果你有任何选项哈希参数,他们必须去的lambda,像这样:

 has_many :things, -> { order :stuff }, dependent: :destroy 

花了我一分钟来弄清楚自己 – 希望它可以帮助任何人来到这个问题有同样的问题。

或者,您可以在模型上放置order子句,例如:

 has_many :options, order: 'name' # In class Answer 

 has_many :options # In class Answer default_scope { order 'name' } # In class Option 

PS:我得到ArgumentError: wrong number of arguments (1 for 0) ,当做has_many :things, -> {}