2017-10-27 3 views
0

Ich versuche, mehrere Modelle wie unten Benutzermodell unscope demWie werden mehrere Modelle in Schienen unscope?

class User 
    acts_as_paranoid 
    has_one :category 
    has_one :brand 
    has_one :item   

    INDEXED_FIELDS = { 
    only: [:name], 
    include: { 
     category: { only: [:name] }, 
     item: { only:[:name] }, 
     brand: { only: [:name]}, 
    } 
    } 

    def custom_json 
    Category.unscoped do 
     Item.unscoped do 
     Brand.unscoped do 
      self.as_json(INDEXED_FIELDS) 
     end 
     end 
    end 
    end 
end 

User-Modell, das auch

Muster Kategorie Modell acts_as_paranoid hat, hat folgenden Verein acts_as_paranoid hat, Marke und Item-Modell haben denselben Code

Kann ich dies dynamisch mit 'N' Anzahl von Modellen tun, wie Iterieren über Array wie unten

def custom_json 
    [Category, Item, Brand].each do 
    # do unscoping 
    end 
end 

Verband sieht aus wie

+0

Was genau Sie wollen, indem Sie nicht scoping ?? –

+0

@NarasimhaReddy Ich möchte Standard-Scope-Bedingungen von mehreren Modellen ausschließen –

+1

Das ist in Ordnung. Aber was ist das Szenario, wenn man mehrere Modelle gleichzeitig aufheben möchte. Wir können tun, während Sie richtig nachfragen? –

Antwort

0

Ich denke, der Ansatz, den Sie haben können, ist die Klasse manuell unscope, durch default_scopes-[] Einstellung, und dann wieder setzen.

classes_to_unscope = [Category, Item, Brand] 
# remove default_scopes, saving them in previous_scopes 
previous_scopes = classes_to_unscope.map do |klazz| 
    scopes = klazz.default_scopes 
    klazz.default_scopes = [] 
    scopes 
end 
self.as_json(INDEXED_FIELDS) 
# put default_scopes back 
classes_to_unscope.each_with_index do |klazz, i| 
    klazz.default_scopes = previous_scopes[i] 
end 
+0

Was ist 'klazz.default_scoping', gibt es einen Fehler als undefinierte Methode? –

+0

Sorry, Tippfehler, es war 'default_scopes' –

Verwandte Themen