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) }
尝试这个。