2013-07-01 2 views
5

Ich habe folgendes Anliegen in meiner Rails-Anwendung:Zugriff auf den Modellnamen in einem Problem (oder in einem Modul)?

module Authenticable 
    extend ActiveSupport::Concern 

    included do 
    # ... 
    end 

    module ClassMethods 
    def quoted_table_name 
     self.class.name.downcase.pluralize # returns "classes" 
    end 
    end 
end 

Wenn ich einen Benutzerklasse haben:

class User 
    include Authenticable 
end 

dann könnte ich User.quoted_table_name wie "users" zurückzukehren. Derzeit gibt User.quoted_table_name"classes" zurück. Ich habe auch folgendes versucht, aber nichts hat sich geändert.

def quoted_table_name 
    Proc.new { self.class.name.downcase.pluralize }.call 
end 
+1

Vielleicht ist es, weil 'quoted_table_name' ist schon auf der Klassenseite. Die Klasse der User-Klasse ist 'Class' (liebe diesen Satz!). Sie könnten versuchen, eine 'name.downcase.pluralize' – tessi

+0

Nizza Fang. Das war das Problem. – Max

+0

Übergab den Kommentar in eine Antwort. Wie es eigentlich eine Antwort war. Es freut mich, dass ich helfen konnte :) – tessi

Antwort

5

Versuchen Sie Folgendes:

module Authenticable 
    ... 

    module ClassMethods 
    def quoted_table_name 
     name.downcase.pluralize # returns "users" 
    end 
    end 
end 

self.class.name.downcase.pluralize nicht funktioniert, weil wir schon auf der Klassenseite des -Klasse User arbeiten. Wenn die Klasse User für ihre Klasse gefragt wird, wird Class zurückgegeben. Class.name.downcase.pluralize ist jedoch "Klassen".

0

Sofern Sie eine Methode name in Ihrem User-Modell haben, könnten die möglicherweise passieren:

def name 
    [first_name, last_name].join 
end 

So könnte man self.table_name als verwenden in:

module Authenticable 
    ... 

    module ClassMethods 
    def quoted_table_name 
     self.table_name # returns "users" 
    end 
    end 
end 
Verwandte Themen