2013-01-25 19 views
18

Jak mogę uzyskać nazwę klasy modelu, w którym uwzględniam problem?Szyny: Uzyskaj nazwę klasy zewnętrznej wewnątrz koncernu

Tworzę problem dotyczący zakresu opisanego w tym dokumencie pod numerem https://stackoverflow.com/a/14483808/1715035, ale potrzebuję nazwy modelu do wyszukiwania polimorficznego.

self.table_name działa dobrze, podobnie jak self.table_name.singularize.titleize.gsub(/\s+/, ""), ale może jest łatwiejszy sposób na uzyskanie nazwy klasy.

+2

Pamiętaj "self" _IS_ sama klasa :) Tak jak Andy mówi; po prostu użyj 'self',' self.name' lub po prostu 'name'. – Casper

Odpowiedz

29

Możesz użyć metody name, jak w klasach.

module M 
    extend ActiveSupport::Concern 

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

Ah, z jakiegoś powodu próbowałem self.class.name, ale tak to działa świetnie! – WhoDidThis

+4

Blok "included" jest wykonywany w kontekście klasy, gdzie 'self' to' YourModel', a zatem 'self.class' będzie" Class "- nie to, co chcesz! :) –

+0

Właściwie 'self.class.name' spowodowałoby to, co chcesz. Chociaż nie mogłem znaleźć faktu, że 'self = TheClass', w dokumentacji. – lllllll