不推荐使用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议的asc
或desc
,请使用:
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, -> {}
。