在我的Rails应用程序中有一个默认范围,如下所示:
default_scope order: 'external_updated_at DESC'
我现在已升级到Rails 4,当然,我收到以下弃用警告“不推荐使用散列调用#scope或#default_scope。请使用包含范围的lambda。”。我已经成功转换了我的其他范围,但我不知道default_scope的语法应该是什么。这不起作用:
default_scope, -> { order: 'external_updated_at' }
答案 0 :(得分:150)
应该只有:
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
答案 1 :(得分:21)
这对我有用:
default_scope { order(:created_at => :desc) }
答案 2 :(得分:7)
这对我也很有用:
default_scope { order('created_at DESC') }
答案 3 :(得分:2)
这对我有用(只是为了说明哪里),因为我通过同样的问题来到这个主题。
default_scope { where(form: "WorkExperience") }
答案 4 :(得分:2)
您还可以使用lambda
关键字。这对多行块非常有用。
default_scope lambda {
order(external_updated_at: :desc)
}
相当于
default_scope -> { order(external_updated_at: :desc) }
和
default_scope { order(external_updated_at: :desc) }
答案 5 :(得分:1)
这适用于Rails 4
default_scope { order(external_updated_at: :desc) }
答案 6 :(得分:0)
default_scope -> { order(created_at: :desc) }
别忘了->
符号
答案 7 :(得分:0)
default_scope {
where(published: true)
}
试试这个。