我用ActiveRecord::Base.set_table_name
在動態創建的ActiveRecord類上設置我的表名。現在我需要知道如何在稍後獲得價值。 api文檔沒有提及如何做到這一點。此外,我無法從ActiveRecord類名稱派生表名,因爲它們的鍵名與表名不同。從ActiveRecord獲取表名
下面是我在做什麼
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
在這種情況下一個更好的例子,如果const_name
=測試和數據庫名稱數據庫,應該創建一個類的ActiveRecord :: Base的:: DatabaseTest的,它所做的。但是當我調用table_name時,我得到了未定義的局部變量或方法。我需要在課堂上調用table_name嗎?
更新: 我得到它通過調用instance.class.table_name
我曾經嘗試這樣做,它說未定義的方法。我應該更清楚一點。我是元編程這個類的創建。我正在爲我的問題添加一個更清晰的示例 – MobileOverlord 2012-04-26 14:32:10
啊,對不起,我有點偏離了這個多元化的深度。我可以告訴你的是'table_name'是從'ActiveRecord :: ModelSchema :: ClassMethods'獲得的'ActiveRecord :: Base'(因此它的派生類)的一個類方法。 – Chowlett 2012-04-26 14:49:49