Ich habe ActiveRecord::Base.set_table_name
verwendet, um meinen Tabellennamen für eine dynamisch erstellte ActiveRecord-Klasse festzulegen. Jetzt muss ich wissen, wie ich diesen Wert später bekomme. Die API-Dokumente erwähnen nichts darüber, wie dies zu tun ist. Außerdem kann ich den Tabellenname nicht vom ActiveRecord-Klassennamen ableiten, da sie anders als der Tabellenname codiert sind.Abrufen des Tabellennamens von ActiveRecord
Hier ist ein besseres Beispiel dafür, was ich
table_klass = Class.new(ActiveRecord::Base)
ActiveRecord::Base.const_set(const_name,table_klass)
app = @app
table_klass.class_eval do
after_save do
@@channel.push self
end
set_table_name t.server_table
establish_connection(
:adapter => "mysql2",
:host => app.db_host,
:username => app.db_user,
:password => app.db_pass,
:database => app.db_name
)
end
In diesem Fall täte, wenn der const_name
= Test und der Name der Datenbank Datenbank ist es eine Klasse von Activerecord :: Base :: DatabaseTest schaffen sollte, was es macht. Aber wenn ich table_name darauf anrufe, erhalte ich eine undefinierte lokale Variable oder Methode. Muss ich table_name für die Klasse aufrufen?
Update: ich es von instance.class.table_name
ich dies versucht haben, sagt es nicht definierte Methode. Ich sollte ein wenig klarer sein. Ich habe die Erstellung dieser Klasse metaprogrammiert. Ich füge ein klareres Beispiel zu meiner Frage hinzu – MobileOverlord
Ah, tut mir leid, ich bin ein wenig überfordert mit so viel Meta. Alles, was ich Ihnen sagen kann, ist, dass 'table_name' eine Klassenmethode für' ActiveRecord :: Base' ist (und damit auch für die abgeleiteten Klassen), die aus 'ActiveRecord :: ModelSchema :: ClassMethods' gewonnen wurde. – Chowlett