rails query left includes foreign create active ruby-on-rails ruby activerecord

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''