Quiero cambiar dinámicamente el nombre de la tabla de la clase de modelo ActiveRecord durante la solicitud.Rails 3/ActiveRecord: ¿Cómo cambiar/cambiar el nombre de la tabla durante la solicitud de forma dinámica?
Por ejemplo, hay muchas mesas que tienen una estructura similar (columnas):
mydb:
sample_data_12222
sample_data_12223
sample_data_12224
sample_data_12225
...
Por lo tanto, lo que yo quiero hacer es ...
_1. Definición de la clase de modelo base como:
class SampleData < ActiveRecord::Base
_2. Cambio de la tabla de destino durante la petición como:
def action_method
SampleData.set_table_name "sample_data_#{params[:id]}"
@rows = SampleData.all
Parece que por encima de código es correcto si se ejecuta en entorno no roscada (como en pasajeros/mod_rails). Pero es no seguro para subprocesos, por lo que puede no funcionar en entornos con rosca (como en JRuby-Rack).
También probé la creación de la clase delived así:
def action_method
@model_class = Class.new(SampleData)
@model_class.set_table_name "sample_data_#{params[:id]}"
@rows = @model_class.all
Pero causa pérdidas de memoria, aunque la clase del modelo delived no se utiliza más después de la solicitud se completó. :(
¿Hay una mejor manera de hacer eso
Gracias por su idea, estaba buscando algo similar (pero un poco más simple). Espero que mi respuesta (todavía) lo ayude @ – Veger
Gracias, y lo siento por marcar su respuesta aceptada. ;) Llegué a algo similar a tu respuesta. – kaorukobo