ruby on rails - query - Obtener el nombre de la tabla de ActiveRecord
rails find (4)
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.
Aquí hay 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 const_name
= Test y el nombre de la base de datos es Database, debería crear una clase de ActiveRecord :: Base :: DatabaseTest, que es lo que 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 hice funcionar llamando a instance.class.table_name
¿Has probado table_name
? Docs .
Creo que hay una manera más elegante, pero la solución más simple es 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
}
Tarde a la fiesta.
Usé el siguiente código de rieles:
my_record = Record.id(0) # hypothetical code
table_name = my_record.class.table_name
class User < ActiveRecord::Base
end
User.table_name
# ''users''