Utilicé ActiveRecord::Base.set_table_name
para establecer el nombre de mi tabla en una clase ActiveRecord creada dinámicamente. Ahora necesito saber cómo obtener ese valor más tarde. Los documentos de API no mencionan nada sobre cómo hacer esto. Además, no puedo derivar el nombre de la tabla del nombre de la clase ActiveRecord porque están codificados de forma diferente que el nombre de la tabla.Obtener el nombre de la tabla de ActiveRecord
Aquí es un mejor ejemplo de lo que estoy haciendo
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
En este caso, si el const_name
= Prueba y el nombre de base de datos es la base de datos se debe crear una clase de ActiveRecord :: Base :: DatabaseTest, lo cual hace Pero cuando llamo a table_name, obtengo una variable o método local indefinido. ¿Debo llamar a table_name en la clase?
Actualización: Lo tengo trabajo llamando instance.class.table_name
He intentado esto, se dice que el método no definido. Debería estar un poco más claro. Estoy metaprogramando la creación de esta clase. Estoy agregando un ejemplo más claro a mi pregunta – MobileOverlord
Ah, lo siento, estoy un poco fuera de mi profundidad con tanto meta. Todo lo que puedo decir es que 'table_name' es un método de clase en' ActiveRecord :: Base' (y de ahí sus clases derivadas), obtenido de 'ActiveRecord :: ModelSchema :: ClassMethods'. – Chowlett