27

我曾经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

4

3 回答 3

45

你试过table_name吗?文档

于 2012-04-26T13:16:12.810 回答
15

晚会迟到了。

我使用了以下 Rails 代码:

my_record = Record.id(0) # hypothetical code
table_name = my_record.class.table_name
于 2014-02-01T20:55:26.680 回答
9
class User < ActiveRecord::Base
end

User.table_name 
# 'users'
于 2012-04-26T13:20:08.550 回答