2013-01-25 14 views
18

Wie kann ich den Klassennamen eines Modells, das ich ein Anliegen einschließe?Schienen: Erhalten äußere Klassenname innerhalb betreffen

Ich erstelle ein Bedenken für einen Bereich, wie hier beschrieben https://stackoverflow.com/a/14483808/1715035, aber benötigen den Modellnamen für die polymorphe Suche.

self.table_name funktioniert gut und so funktioniert self.table_name.singularize.titleize.gsub(/\s+/, "") aber vielleicht gibt es eine einfachere Möglichkeit, den Klassennamen zu erhalten.

+2

Erinnere dich 'selbst' _IS_ die Klasse selbst :) Wie Andy sagt; Verwenden Sie einfach 'self',' self.name' oder nur 'name'. – Casper

Antwort

29

Sie können die Methode name wie in der Klasse selbst verwenden.

module M 
    extend ActiveSupport::Concern 

    included do 
    scope :my_fancy_scope, where(some_type: name) 
    end 
end 
+0

Ah, aus irgendeinem Grund habe ich versucht, self.class.name auszuprobieren, aber ja, das funktioniert großartig! – WhoDidThis

+4

Der 'included' Block wird im Kontext der Klasse ausgeführt, wobei' self' 'YourModel' wäre und daher' self.class' 'Class' wäre - nicht was du willst! :) –

+0

Eigentlich würde 'self.class.name' auch dazu führen, was du willst. Obwohl ich nicht finden konnte, dass "self = TheClass", in der Dokumentation. – lllllll