从ActiveRecord获取表名

我使用ActiveRecord::Base.set_table_name在动态创建的ActiveRecord类上设置我的表名。 现在我需要知道如何在以后获得该值。 api文档没有提到任何关于如何执行此操作的内容。 另外,我无法从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 = Test并且数据库名称是Database,那么它应该创建一个ActiveRecord :: Base :: DatabaseTest类。 但是当我调用table_name时,我得到了未定义的局部变量或方法。 我需要在类上调用table_name吗?

更新:我通过调用instance.class.table_name

你试过table_name吗? 文件 。

迟到了。

我使用了以下rails代码:

 my_record = Record.id(0) # hypothetical code table_name = my_record.class.table_name 
 class User < ActiveRecord::Base end User.table_name # 'users' 

我认为有更优雅的方式,但最简单的解决方案是eval

 my_class_name = "MyNewARClass" my_class_table_name = "MyDatabase" eval %{ class #{my_class_name} < ActiveRecord::Base self.table_name = "#{my_class_table_name}" end }