Область 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) 
}

Попробуйте это.