Rails 4默认范围

Joe*_*att 73 default-scope ruby-on-rails-4

在我的Rails应用程序中有一个默认范围,如下所示:

default_scope order: 'external_updated_at DESC'
Run Code Online (Sandbox Code Playgroud)

我现在升级到Rails 4,当然,我得到以下弃用警告"不推荐使用散列调用#scope或#default_scope.请使用包含范围的lambda.".我已经成功转换了我的其他范围,但我不知道default_scope的语法应该是什么.这不起作用:

default_scope, -> { order: 'external_updated_at' }
Run Code Online (Sandbox Code Playgroud)

Luk*_*uke 150

应该只是:

class Ticket < ActiveRecord::Base
  default_scope -> { order(:external_updated_at) } 
end
Run Code Online (Sandbox Code Playgroud)

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

class Shirt < ActiveRecord::Base
  scope :red, -> { where(color: 'red') }
end
Run Code Online (Sandbox Code Playgroud)

  • 如果没有箭头,这在4.0.2中对我没有用.我的工作解决方案是```default_scope - > {order_by(:created_at =>:desc)}``` (6认同)
  • BTW @JoeGatt问题的正确答案是`default_scope order('external_updated_at DESC')` (3认同)

小智 21

这对我有用:

default_scope  { order(:created_at => :desc) }
Run Code Online (Sandbox Code Playgroud)

  • 在新的Ruby语法中:`default_scope {order(created_at :: desc)}` (3认同)

小智 7

这也对我有用:

default_scope { order('created_at DESC') }