2016-03-25 9 views
1

Ich habe meine Rails 5 ApplicationRecord:Rails 5: Beste Möglichkeit, Namenszuordnung zwischen Modellen und SQL-Tabellennamen zu überschreiben?

class ApplicationRecord < ActiveRecord::Base 
    self.abstract_class = true 
end 

und eine Reihe von Modellen, die von ApplicationRecord erben. Nun möchte ich, dass jeder Modellname individuell auf seine Datenbanktabelle abgebildet wird. Zum Beispiel kann ich tun:

class MyModel < ApplicationRecord 
    self.table_name = 'MY_MODELS' # overrides default 'my_models' 
end 

Aber da alle Zuordnungen vorhersehbar sind, ich dachte, ich würde in der Basisklasse nur das tun:

class ApplicationRecord < ActiveRecord::Base 
    self.abstract_class = true 

    def self.table_name 
    self.name.underscore.pluralize.upcase 
    end 
end 

... aber das hat nicht funktioniert , obwohl technisch Klassenmethoden von der Unterklasse geerbt werden sollten. (? Jede Idee, warum)

Ich habe auch versucht, ein Verfahren hinzufügen, die so etwas wie dies taten:

class ApplicationRecord < ActiveRecord::Base 
    self.abstract_class = true 

    def self.inherited(subclass) 
    subclass.table_name = subclass.name.underscore.pluralize.upcase 
    end 
end 

Dies entweder nicht funktioniert hat. Irgendeine Idee von dem besten Weg, dies zu tun?

+0

Ich denke, das hätte funktionieren sollen oder vielleicht müssen Sie neu laden! Ihr Server oder Ihre Konsole, damit sie wirksam wird. 'Klasse ApplicationRecord oreoluwa

Antwort

2

Ich löste dies durch Hinzufügen eines Anliegens, das die table_name Funktion für jedes Modell implementiert.

Verwandte Themen