2009-10-08 6 views
36

Y at-il un moyen de désactiver le default_scope pour une seule association belongs_to? Le default_scope est bien pour tous, mais un seul belongs_to que je voudrais contourner la portée. Je connais with_exclusive_scope mais je ne pense pas que cela puisse être utilisé avec belongs_to.Comment désactiver default_scope pour un belongs_to?

Des suggestions?

Contexte: J'essaie de permettre à l'association branch_source dans acts_as_revisable de pointer vers une révision qui n'est pas la dernière (revisable_is_current est faux).

Répondre

14

juste eu ce problème moi-même, et voici ce que je suis venu avec:

class Comment < ActiveRecord::Base 
    belongs_to :document # Document has some kind of default scope 
         # that stops us from finding it 

    # Override getter method for document association 
    def document_with_unscoped 
    # Fetch document with default scope disabled 
    Document.unscoped { document_without_unscoped } 
    end 
    alias_method_chain :document, :unscoped 
end 
31

Probablement un peu en retard à la partie (un peu moins de 3 ans), mais juste courir dans le même problème et la solution de Tobias est certainement la bonne direction, mais il peut être simplifié pour Rails 3.2+. La seule chose que je n'aime pas encore est le nom de classe « codé en dur » pour le document, peut-être il est possible de infléchissent utilisant la réflexion ...

Quoi qu'il en soit ce que je suis venu avec:

class Comment < ActiveRecord::Base 
    # Document has some kind of default_scope 
    belongs_to :document 

    # Ensure document is not scoped, because Rails 3.2 uses modules it's 
    # possible to use simple inheritance. 
    def document 
    Document.unscoped { super } 
    end 
end 

Mise à jour: a une solution générique, basée sur reflect_on_association https://gist.github.com/2923336

25
belongs_to :account, -> { unscope(where: :destroyed_at) } 

fonctionne pour moi, Rails 4.1

+1

Est-il possible de débloquer toutes les conditions? – freemanoid

+0

Excellente solution pour Rails 4.1+, merci! – ryancheung

+0

Ne fonctionne pas si votre portée par défaut est une chaîne/sql fragement –

Questions connexes