Подтвердить что ты не робот

Получить имя таблицы из ActiveRecord

Я использовал ActiveRecord::Base.set_table_name для установки имени моей таблицы в динамически созданный класс ActiveRecord. Теперь мне нужно знать, как получить это значение позже. В api docs ничего не говорится о том, как это сделать. Кроме того, я не могу вывести имя таблицы из имени класса 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 и именем базы данных является База данных, он должен создать класс ActiveRecord:: Base:: DatabaseTest, который он делает. Но когда я вызываю table_name, я получаю локальную переменную или метод undefined. Мне нужно вызвать table_name в классе?

Update: Я получил его работу, позвонив instance.class.table_name

4b9b3361

Ответ 2

Поздно к вечеринке.

Я использовал следующий код rails:

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

Ответ 3

class User < ActiveRecord::Base
end

User.table_name 
# 'users'

Ответ 4

Я думаю, что есть более элегантный способ, но самым простым решением является 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
  }