venerdì 24 agosto 2007

Dynamic ActiveRecord

A volte in una applicazione, in fase di produzione, potrei non conoscere a priori i nomi e le tabelle che dovrò utilizzare.
Normalmente in SQL metterei in una variabile il nome della tabella e la innesterei all'interno della query.
Questo con rails è possibile, ma si perdono tutti i benefici derivanti da ActiveRecord (la classe che implementa il livello ORM del framework).

Come fare quindi se non conosco a priori il nome della tabella e di conseguenza non posso generare il modello in fase di sviluppo?

Una possibile soluzione è di utilizzare un semplice modello vuoto di appoggio

class DynTable < ActiveRecord::Base;
end


Quindi nel mio controller ora posso specificare la tabella da utilizzare:

my_table_name = "tests"
DynTable.set_table_name(my_table_name)


Il metodo set_table_name table_nameviene solitamente utilizzato all'interno del modello. Non potendo modificare a runtime il modello dall'interno (perchè di fatto i modelli in rails sono delle classi singleton), posso farlo dall'esterno.

Ora che il mio modello "punta" alla giusta tabella posso utilizzarlo per i miei scopi.

dyn_content = DynTable.find(:all)
DynTable.new
DynTable.delete
...


Spero che vi sia utile...
Ciao

Nessun commento:

Posta un commento