Rails 4 область действия по умолчанию
В моем приложении Rails есть область по умолчанию, которая выглядит так:
default_scope order: 'external_updated_at DESC'
Сейчас я обновился до Rails 4 и, конечно же, получаю следующее предупреждение об устаревании: "Вызов #scope или #default_scope с хэшем не рекомендуется. Пожалуйста, используйте лямбду, содержащую область действия". Я успешно преобразовал другие области, но не знаю, какой должен быть синтаксис для default_scope. Это не работает:
default_scope, -> { order: 'external_updated_at' }
8 ответов
Должно быть только:
class Ticket < ActiveRecord::Base
default_scope { order(:external_updated_at) }
end
default_scope принимает блок, лямбда необходима для 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) }
Это сработало у меня (только для иллюстрации с помощью where), потому что я пришел к этой теме по той же проблеме.
default_scope { where(form: "WorkExperience") }
Это работает для меня в Rails 4
default_scope { order(external_updated_at: :desc) }
default_scope -> { order(created_at: :desc) }
Не забывайте ->
условное обозначение