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 に答える
9
class User < ActiveRecord::Base
end

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