Rails 4的默认范围

在我的Rails应用程序有一个默认的作用域如下所示:

default_scope order: 'external_updated_at DESC' 

我现在已经升级到了Rails 4,当然,我得到了下面的弃用警告:“不要使用带有散列的#scope或#default_scope,不要使用含有作用域的lambda。” 我已经成功地转换了我的其他作用域,但我不知道default_scope的语法应该是什么。 这不起作用:

 default_scope, -> { order: 'external_updated_at' } 

应该只是:

 class Ticket < ActiveRecord::Base default_scope { order(:external_updated_at) } end 

default_scope接受一个块,lambda对scope()是必须的,因为有2个参数,name和block:

 class Shirt < ActiveRecord::Base scope :red, -> { where(color: 'red') } end 

这对我来说是有效的:

 default_scope { order(:created_at => :desc) } 

这也适用于我:

default_scope { order('created_at DESC') }

你也可以使用lambda关键字。 这对多行块很有用。

 default_scope lambda { order(external_updated_at: :desc) } 

相当于

 default_scope -> { order(external_updated_at: :desc) } 

 default_scope { order(external_updated_at: :desc) } 

这从我工作(只是为了说明一个在哪里),因为我通过同样的问题来到这个话题。

 default_scope { where(form: "WorkExperience") } 

这在Rails 4中适用于我

 default_scope { order(external_updated_at: :desc) } 
 default_scope -> { order(created_at: :desc) } 

不要忘记->符号

 default_scope { where(published: true) } 

尝试这个。