从ActiveRecord获取表名

时间:2012-04-26 13:10:03

标签: ruby-on-rails ruby 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

来解决这个问题

4 个答案:

答案 0 :(得分:36)

你试过table_name吗? Docs

答案 1 :(得分:11)

晚会。

我使用了以下rails代码:

my_record = Record.id(0) # hypothetical code
table_name = my_record.class.table_name

答案 2 :(得分:8)

class User < ActiveRecord::Base
end

User.table_name 
# 'users'

答案 3 :(得分:1)

我认为有更优雅的方式,但最简单的解决方案是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
  }