74 votes

Portée par défaut de Rails 4

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. Veuillez utiliser 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' }
 

152voto

Luke Points 2163

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 y a 2 paramètres, name et block:

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

21voto

voidwalker Points 121

C'est ce qui a fonctionné pour moi:

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

7voto

Alex Hawkins Points 31

Cela a également fonctionné pour moi:

default_scope { order('created_at DESC') }

2voto

Vinozio Points 287

Cela a fonctionné de moi (juste pour illustration avec un où) parce que je suis venu à ce sujet via le même problème.

 default_scope { where(form: "WorkExperience") }
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X