[ruby-it] 1 applicazione n database

david david.palm a iperbole.bologna.it
Gio 24 Ago 2006 08:47:43 CEST


Ho un progetto in corso che migra dati da un'istanza di Oracle verso 
un'altra (e processa i dati in mezzo). Non è un applicazione rails, ma 
uso ActiveRecord, subclassandolo (dal verbo /subclassare...)/ così:

require 'rubygems'
require	'active_record'

class primo_db_AR < ActiveRecord::Base
	self.abstract_class 		=	true
	self.pluralize_table_names	= 	false	
	establish_connection(
		:database	=> 	"nome_db",
		:adapter	=> 	"oci",
		:host		=>	"nome_host",
		:username	=> 	"user",
		:password	=>	"pwd"
		)
end

class secondo_db_AR < ActiveRecord::Base
	self.abstract_class 		=	true
	self.pluralize_table_names	= 	false	
	establish_connection(
		:database	=> 	"nome_db_2",
		:adapter	=> 	"oci",
		:host		=>	"nome_host_2",
		:username	=> 	"user2",
		:password	=>	"pwd2"
		)
end

A questo punto puoi creare modelli che sfruttino o l'una o l'altra 
connessione (abbastanza) trasparentemente:

class pippo < primo_db_AR
	set_table_name	:nome_bizzarro_della_tabella
	has_many	:paperinos
end

class pluto < secondo_db_AR
end


Il "trucco" sta tutto nel indircare a AR che la sottclasse è "abstract". 
Nel tuo caso tutta la vicenda di subclassare AR per connetterti al 
k_database nonché al db comune va fatta dinamicamente, al momento del 
login. Sarà forse un po' incasinato, ma non sembra impossibile...

:-)

Biagio Maffettone wrote:
> Questo lo scenario:
> L'applicazione gestisce n utenti.
> Ogni utente si connette al suo database: utente => k database => 
> k_database
> Inoltre tutti gli utenti si connettono ad un database comune => 
> common_database
> Quindi al login l'utente k immette il database a cui connettesi e 
> relative credenziali e a questo punto si connette contemporaneamente a 
> k_database e common_database.
> Ora negli esempi che ho potuto vedere nel web il database viene 
> specificato in
> database.yml ma qui si ha bisogno che questa scelta sia fatta all'atto 
> del login.
> Avete suggerimenti ?
>
> Grazie.
> B.M.
>
>
>
>   
> ------------------------------------------------------------------------
>
> _______________________________________________
> Ml mailing list
> Ml a lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml
>   

-- 
"Remember, always be yourself. Unless you suck." - Joss Whedon



Maggiori informazioni sulla lista Ml