166 votes

La substitution d’un default_scope de Rails

Si j’ai un modèle ActiveRecord::Base avec une étendue par défaut :

Est-il possible de faire une *sans* utiliser le conditions ? En d’autres termes, vous pouvez substituer une étendue par défaut ?

J’aurais pensé qu’à l’aide de « par défaut » dans le nom suggère qu’il était substituable, sinon il serait appelé quelque chose comme `` , non ?

219voto

Vincent Points 5364

Dans Rails 3 :

158voto

Pär Wieslander Points 11258

Réponse courte : n’utilisez pas de sauf si vous devez vraiment. Vous serez probablement mieux avec des portées de nommées. Cela dit, vous pouvez utiliser pour substituer l’étendue par défaut si vous avez besoin de.

Jetez un oeil à cette question pour plus de détails.

112voto

GuiGS Points 863

Si tout ce dont vous avez besoin est de changer l’ordre défini dans , vous pouvez utiliser le [ méthode](http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html#method-i-reorder).

exécute le code SQL suivant :

53voto

jibiel Points 2162

Depuis 4.1 vous pouvez utiliser ActiveRecord::QueryMethods#unscope à la lutte de l'étendue par défaut:

class User < ActiveRecord::Base
  default_scope { where tester: false }
  scope :testers, -> { unscope(:where).where tester: true }
  scope :with_testers, -> { unscope(:where).where tester: [true, false] }
  # ...
end

Il est actuellement possible d' unscope des trucs comme: :where, :select, :group, :order, :lock, :limit, :offset, :joins, :includes, :from, :readonly, :having.

Mais encore merci d'éviter à l'aide de default_scope si vous le pouvez. C'est pour votre propre bien.

13voto

John Topley Points 58789

Vous pouvez substituer une étendue par défaut à l’aide du `` méthode. Donc :

  • ``documentation

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