Область Rails 4 по умолчанию
В моем приложении Rails есть область по умолчанию, которая выглядит так:
default_scope order: 'external_updated_at DESC'
Теперь я обновлен до Rails 4 и, конечно же, получил следующее предупреждение об отказе: "Вызов #scope или #default_scope с хешем устарел. Пожалуйста, используйте лямбда, содержащую область видимости". Я успешно преобразовал другие области, но я не знаю, какой должен быть синтаксис для default_scope. Это не работает:
default_scope, -> { order: 'external_updated_at' }
Ответы
Ответ 1
Должно быть только:
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
Ответ 2
Это то, что сработало для меня:
default_scope { order(:created_at => :desc) }
Ответ 3
Это также помогло мне:
default_scope { order('created_at DESC') }
Ответ 4
Это сработало от меня (просто для иллюстрации с тем, где), потому что я пришел к этой теме по той же проблеме.
default_scope { where(form: "WorkExperience") }
Ответ 5
Вы также можете использовать ключевое слово lambda
. Это полезно для многострочных блоков.
default_scope lambda {
order(external_updated_at: :desc)
}
что эквивалентно
default_scope -> { order(external_updated_at: :desc) }
и
default_scope { order(external_updated_at: :desc) }
Ответ 6
Это работает для меня в Rails 4
default_scope { order(external_updated_at: :desc) }
Ответ 7
default_scope -> { order(created_at: :desc) }
Не забывайте символ ->
Ответ 8
default_scope {
where(published: true)
}
Попробуйте это.