Рельсы 4 область по умолчанию


в моем приложении Rails есть область по умолчанию, которая выглядит так:

default_scope order: 'external_updated_at DESC'

теперь я обновился до Rails 4 и, конечно же, я получаю следующее предупреждение об устаревании "вызов #scope или #default_scope с хэшем является устаревшим. Пожалуйста, используйте лямбду, содержащую область.". Я успешно преобразовал мои другие области, но я не знаю, какой синтаксис для default_scope должен быть. Это не работает:

default_scope, -> { order: 'external_updated_at' }
8 72

8 ответов:

должно быть только:

class Ticket < ActiveRecord::Base
  default_scope { order(:external_updated_at) } 
end

default_scope принимает блок, лямбда необходима для scope (), потому что есть 2 параметра, имя и блок:

class Shirt < ActiveRecord::Base
  scope :red, -> { where(color: 'red') }
end

Это то, что сработало для меня:

default_scope  { order(:created_at => :desc) }

Это также сработало для меня:

default_scope { order('created_at DESC') }

это работает у меня (просто для иллюстрации с Где), потому что я пришел к этой теме через те же проблемы.

default_scope { where(form: "WorkExperience") }

вы также можете использовать lambda ключевое слово. Это полезно для многострочных блоков.

default_scope lambda {
  order(external_updated_at: :desc)
}

что эквивалентно

default_scope -> { order(external_updated_at: :desc) }

и

default_scope { order(external_updated_at: :desc) }

это работает для меня в Rails 4

default_scope { order(external_updated_at: :desc) }
default_scope -> { order(created_at: :desc) }

Не забудьте -> символ

default_scope { 
      where(published: true) 
}

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