Forum: Italian Ruby user group Come riempire una tabella intermedia con più campi?

Posted by pezzuya .. (pezzuya)
on 2010-01-27 20:26
Ciao a tutti, ho il problema in oggetto.
La mia tabella intermedia "clients_models" é composta da:

id (solito...autoincrementale)
model_id (riferimento all'id della tabella models)
client_id (riferimento all'id della tabella models)
x (campo da riempire)
y (campo da riempire)
z (campo da riempire)

Ho già "legato" tra loro i vari modelli client, model e clients_model
con le relazioni belongs_to has_many through ecc. e tutto funziona solo
che non sò quale sia il modo migliore per riempire e, allo stesso tempo,
validare i campi x,y,z.

Infatti facendo un qualcosa del genere:

@model.clients_models << @client

vengono riempiti solo i campi id, model_id, client_id.

Forse potrei riempire (x,y,z) nel "modo tradizionale" creando un nuovo
oggetto ClientsModel e riempiendolo con i campi passati dalla
vista(form_for).

Però mi chiedevo se c'era un modo "più elegante" o semplicemente "più
furbo" di riempirli utilizzando le relazioni precedentemente create tra
i modelli.

Voi che ne dite?

Grazie a tutte le persone che mi risponderanno. Ciao
Posted by Marco Mastrodonato (marcomd)
on 2010-01-28 14:47
Non mi è mai capitato di dover mettere dei campi sulla tabella di legame 
molti a molti, ma ha senso? Sono informazioni sul legame che quindi è 
necessario duplicare ogni volta?
Perchè altrimenti avresti potuto usare l'automatismo con 
has_and_belongs_to_many che è completamente trasparente, senza doverti 
gestire l'oggetto.
Se invece sono informazioni che devono stare la e devono arrivare da un 
form, non credo ci sia altra scelta se non quella di seguire la via 
tradizionale, come la chiami tu, istanziando l'oggetto mediante la 
variabile params
Posted by Pietro Giorgianni (giorgian)
on 2010-01-28 14:58
(Received via mailing list)
Il 27 gennaio 2010 20.26, pezzuya .. <pezzuya-gruppi@yahoo.it> ha 
scritto:
> Ho già "legato" tra loro i vari modelli client, model e clients_model
> Forse potrei riempire (x,y,z) nel "modo tradizionale" creando un nuovo
> oggetto ClientsModel e riempiendolo con i campi passati dalla
> vista(form_for).
>
> Però mi chiedevo se c'era un modo "più elegante" o semplicemente "più
> furbo" di riempirli utilizzando le relazioni precedentemente create tra
> i modelli.

Non capisco, perché crei le relazioni tra i modelli prima e poi
inserisci gli altri dati?

Immagino tu abbia un form, in cui per un dato client selezioni
molteplici model (o viceversa) e per ciascuno le informazioni x, y, z.

client avrà molti clients_models, così anche models; puoi gestire
quindi il tutto come un normale uno a molti, vi sono parecchi esempi
in giro, su railscasts o altrove.


pietro
Posted by pezzuya .. (pezzuya)
on 2010-01-30 18:57
In effetti forse potevo gestire il tutto con una semplice relazione uno 
a molti tra models e clients_models.
Però in fase di "scaffolding" mi era venuta in mente una relazione molti 
a molti quindi l'ho gestita così.
Forse ho pensato di gestirla così per avere una doppia connessione tra 
le tabelle clients e models che in effetti mi potrebbe tornare utile più 
avanti.
Per ora ho risolto in "modo tradizionale".

Grazie a tutti.
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.