2009-10-08 14 views
36

¿Hay alguna manera de desactivar el default_scope para una sola asociación belongs_to? El default_scope está bien para todos menos un solo belongs_to que me gustaría omitir el alcance. Estoy familiarizado con with_exclusive_scope, pero no creo que se pueda usar con belongs_to.Cómo deshabilitar default_scope para un belongs_to?

¿Alguna sugerencia?

Contexto: Estoy tratando de permitir que la asociación branch_source en acts_as_revisable apunte a una revisión que no es la última (revisable_is_current es falsa).

Respuesta

14

Sólo tuvimos este problema a mí mismo, y esto es lo que ocurrió:

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

Quizás un poco tarde a la fiesta (poco menos de 3 años), pero sólo funcionan con el mismo problema y la solución de Tobias es sin duda la dirección correcta, pero se puede simplificar para Rails 3.2+. La única cosa que todavía no me gusta es el "codificado" nombre de la clase de documento, tal vez es posible conjugar utilizando la reflexión ...

De todos modos esto es lo que he llegado con:

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 

actualización: obtuvo una solución genérica, basado en reflect_on_association https://gist.github.com/2923336

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

funciona para mí, rieles 4.1

+1

¿es posible ¿Descuides todas las condiciones? – freemanoid

+0

Gran solución para Rails 4.1+, ¡Gracias! – ryancheung

+0

No funciona si su alcance predeterminado es una cadena/sql fragement –

Cuestiones relacionadas