2009-10-08 15 views
36

Gibt es eine Möglichkeit, die default_scope für eine einzelne belongs_to Zuordnung zu deaktivieren? Die ist in Ordnung für alle außer einer einzigen belongs_to, die ich möchte den Umfang zu umgehen. Ich bin vertraut mit with_exclusive_scope, aber ich denke nicht, dass das mit gehört werden kann.Wie default_scope für ein belongs_to zu deaktivieren?

Irgendwelche Vorschläge?

Kontext: Ich versuche, die branch_source Zuordnung in acts_as_revisable auf eine Revision zu zeigen, die nicht die neueste ist (revisable_is_current ist falsch).

Antwort

14

hatte einfach dieses Problem selbst, und hier ist, was ich kam mit:

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

Wahrscheinlich ein wenig spät, um die Partei (knapp 3 Jahre), sondern führen Sie einfach in das gleiche Problem und die Lösung von Tobias ist sicherlich die richtige Richtung, kann aber für Rails 3.2+ vereinfacht werden. Das einzige, was Ich mag es nicht immer noch der „hart codierte“ Klassenname für Dokument, vielleicht ist es möglich Reflexion inflect mit ...

Wie auch immer das ist, was ich habe kommen mit:

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 

Update: bekam eine generische Lösung, basierend auf reflect_on_association https://gist.github.com/2923336

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

für mich funktioniert, Rails 4.1

+1

Ist es möglich, Unscope alle Bedingungen? – freemanoid

+0

Tolle Lösung für Schienen 4.1+, Danke! – ryancheung

+0

Funktioniert nicht, wenn der Standardbereich ein String/sql-Fragment ist. –

Verwandte Themen