In meiner Rails-App gibt es einen Standardbereich, der folgendermaßen aussieht:
default_scope order: 'external_updated_at DESC'
Ich habe jetzt ein Upgrade auf Rails 4 durchgeführt und erhalte natürlich die folgende Warnung: "Das Aufrufen von #scope oder #default_scope mit einem Hash ist veraltet. Bitte verwenden Sie ein Lambda, das einen Bereich enthält." Ich habe meine anderen Bereiche erfolgreich konvertiert, weiß aber nicht, wie die Syntax für default_scope lauten soll. Das funktioniert nicht:
default_scope, -> { order: 'external_updated_at' }
ruby-on-rails-4
default-scope
Joe Gatt
quelle
quelle
Antworten:
Sollte nur sein:
class Ticket < ActiveRecord::Base default_scope -> { order(:external_updated_at) } end
default_scope akzeptiert einen Block, Lambda ist für scope () erforderlich, da es zwei Parameter gibt, name und block:
class Shirt < ActiveRecord::Base scope :red, -> { where(color: 'red') } end
quelle
default_scope -> { order_by(:created_at => :desc) }
default_scope { order(:external_updated_at) }
default_scope order('external_updated_at DESC')
Das hat bei mir funktioniert:
default_scope { order(:created_at => :desc) }
quelle
default_scope { order(created_at: :desc) }
Das hat auch bei mir funktioniert:
default_scope { order('created_at DESC') }
quelle
Dies funktionierte bei mir (nur zur Veranschaulichung mit einem Wo), weil ich über das gleiche Problem zu diesem Thema kam.
default_scope { where(form: "WorkExperience") }
quelle
Sie können auch das
lambda
Schlüsselwort verwenden. Dies ist nützlich für mehrzeilige Blöcke.default_scope lambda { order(external_updated_at: :desc) }
das ist äquivalent zu
default_scope -> { order(external_updated_at: :desc) }
und
default_scope { order(external_updated_at: :desc) }
quelle
Dies funktioniert bei mir in Rails 4
default_scope { order(external_updated_at: :desc) }
quelle
default_scope -> { order(created_at: :desc) }
Vergiss das
->
Symbol nichtquelle
default_scope { where(published: true) }
Versuche dies.
quelle