Dans l'application Rails, vous avez une étendue par défaut qui ressemble à ceci:
default_scope order: 'external_updated_at DESC'
Je suis maintenant passé à Rails 4 et, bien sûr, je reçois l'avertissement de dépréciation suivant: "L'appel de #scope ou #default_scope avec un hachage est obsolète. Utilisez un lambda contenant une portée." J'ai réussi à convertir mes autres portées mais je ne sais pas quelle devrait être la syntaxe de default_scope. Cela ne marche pas:
default_scope, -> { order: 'external_updated_at' }
Devrait être seulement:
class Ticket < ActiveRecord::Base
default_scope -> { order(:external_updated_at) }
end
default_scope accepte un bloc, lambda est nécessaire pour scope (), car il existe 2 paramètres, name et block:
class Shirt < ActiveRecord::Base
scope :red, -> { where(color: 'red') }
end
C'est ce qui a fonctionné pour moi:
default_scope { order(:created_at => :desc) }
Vous pouvez également utiliser le mot clé lambda
. Ceci est utile pour les blocs multilignes.
default_scope lambda {
order(external_updated_at: :desc)
}
ce qui équivaut à
default_scope -> { order(external_updated_at: :desc) }
et
default_scope { order(external_updated_at: :desc) }
Cela a fonctionné de moi (juste pour illustration avec un où) car je suis venu à ce sujet via le même problème.
default_scope { where(form: "WorkExperience") }
Cela fonctionne pour moi dans Rails 4
default_scope { order(external_updated_at: :desc) }
default_scope {
where(published: true)
}
Essaye ça.
default_scope -> { order(created_at: :desc) }
N'oubliez pas le symbole ->