# Has\_many :through

**URL:** <https://www.ruby-forum.com/t/has-many-through/189580>\
**Category:** IT\
**Created:** [June 3, 2010, 2:49pm UTC](https://www.ruby-forum.com/t/has-many-through/189580 "2010-06-03T14:49:24Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Renato\_DaprSSSS](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/bc8723/32.png) [@Renato\_DaprSSSS](https://www.ruby-forum.com/u/Renato_DaprSSSS)\
**Post date:** [June 3, 2010, 2:49pm UTC](https://www.ruby-forum.com/t/has-many-through/189580/1 "2010-06-03T14:49:24Z")

</div>

Ciao a tutti,

avrei la necessita di collegare due tabella inserendo nella tabella  
“join” alcune colonne attraverso le quali  
poter definire meglio il tipo di collegamento e, leggendo in giro, credo  
di aver capito che si possa utilizzare  
has\_many :through, in dettaglio ho quindi organizzato la cosa come  
segue:

class Vehicle \< ActiveRecord::Base  
has\_many :name\_vehicles  
has\_many :names, :through =\> :name\_vehicles  
end

class Name \< ActiveRecord::Base  
has\_many :name\_vehicles  
has\_many :vehicles, :through =\> :name\_vehicles  
end

class NameVehicle \< ActiveRecord::Base  
belongs\_to :name  
belongs\_to :vehicle  
end

Nella tabella name\_vehicles, oltre ai due campi name\_id e vehicle\_id ho  
altri campi che  
definiscono meglio la relazione ( tipo\_relazione - inizio\_relazione -  
fine\_relazione ) :

class CreateNameVehicles \< ActiveRecord::Migration  
def self.up  
create\_table :name\_vehicles do |t|  
t.integer :name\_id, :null =\> false  
t.integer :vehicle\_id, :null =\> false  
t.string :tipo\_relazione  
t.date :inizio\_relazione  
t.date :fine\_relazione  
end  
end

inserendo un nuovo “vehicle”, riesco a collegare name\_id e vehicle\_id  
nella tabella con:

#VIEW new vehicles  
\<%= f.label :names %\>  
  
\<%= f.collection\_select :name\_ids, @names, :id, :cognome\_nome, {},  
:multiple =\> true%\>

il mio problema ora è popolare i restanti campi della tabella join (  
tipo\_relazione - inizio\_relazione - fine\_relazione )  
quando inserisco un nuovo veicolo.

Grazie, Renato.

---

<div class="post-metadata">

**Author:** ![Renato\_DaprSSSS](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/bc8723/32.png) [@Renato\_DaprSSSS](https://www.ruby-forum.com/u/Renato_DaprSSSS)\
**Post date:** [June 3, 2010, 3:43pm UTC](https://www.ruby-forum.com/t/has-many-through/189580/2 "2010-06-03T15:43:51Z")

</div>

In questo a caso, dovresti avere una form per creare un NameVehicle che  
abbia le 2 collection select per Name e Vehicle. Ovviamente dovrai prima  
creare i vari Name e Vehicle. In questo modo puoi avere tutti i campi  
aggiuntivi 😉

non so se ho centrato il tuo problema, in effetti non mi è molto chiaro  
quello che stai facendo 😛  
A.

Il 03/06/2010 14:48, Renato Daprà ha scritto:

---

<div class="post-metadata">

**Author:** ![Renato\_DaprSSSS](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/bc8723/32.png) [@Renato\_DaprSSSS](https://www.ruby-forum.com/u/Renato_DaprSSSS)\
**Post date:** [June 3, 2010, 4:55pm UTC](https://www.ruby-forum.com/t/has-many-through/189580/3 "2010-06-03T16:55:18Z")

</div>

Il giorno 03/giu/2010, alle ore 15.43, Andrea P. ha scritto:

> In questo a caso, dovresti avere una form per creare un NameVehicle che  
> abbia le 2 collection select per Name e Vehicle. Ovviamente dovrai prima  
> creare i vari Name e Vehicle. In questo modo puoi avere tutti i campi  
> aggiuntivi 😉
> 
> non so se ho centrato il tuo problema, in effetti non mi è molto chiaro  
> quello che stai facendo 😛  
> A.

Grazie Andrea, hai centrato esattamente il problema, facendo come dici  
tu in effetti funziona,  
però, per popolare i campi aggiuntivi della tabella di join devo prima  
inserire sia “name” che “vehicle”  
per poi gestire i campi aggiuntivi con le collection\_select in  
NameVehicle.

Il mio desiderio era era saltare un passaggio, cioè, dato per scontato  
che name esista già e che all’atto della creazione di un nuovo “vehicle”,  
riesco a gestirlo con “name\_ids”, avrei avrei voluto gestire/popolare i  
campi aggiuntivi in Vehicle new/edit .

Spero di non aver fatto troppa confusione, grazie ancora, Renato

---

<div class="post-metadata">

**Author:** ![Renato\_DaprSSSS](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/bc8723/32.png) [@Renato\_DaprSSSS](https://www.ruby-forum.com/u/Renato_DaprSSSS)\
**Post date:** [June 3, 2010, 5:39pm UTC](https://www.ruby-forum.com/t/has-many-through/189580/4 "2010-06-03T17:39:13Z")

</div>

ciao Renato,

continuo a non avere molto chiaro quello che stai facendo, almeno a  
livello di associazioni 😛

ad ogni modo posso indicarti un paio di strade:

- sei sicuro di aver bisogno di 3 modelli per gestire Nomi, Veicoli  
ed un _TOT_ informazioni da associare? se riuscissi a scendere a 2,  
ovviamente il problema non si porrebbe 😛
- dai uno sguardo alle NestedForms se vuoi inserire dati relativi a  
più model attraverso una sola form. nel caso in cui tu voglia inserire  
_N_ Veicoli per ciascun Nome, ma non sai _quanti_, dovrai smanazzare di  
javascript per aggiungere nuove nested-forms. Un esempio calzante è  
quando vuoi creare una galleria di foto: nella form per creare una  
Gallery, aggiungi una nested-form per la Foto, poi con JS e qualche  
elemento grafico crei un meccanismo di “aggiungi foto”. quando salverai  
la galleria verranno caricate anche le N foto, tutte assieme.

ciao,  
A.

Il 03/06/2010 16:54, Renato Daprà ha scritto:

---

<div class="post-metadata">

**Author:** ![Renato\_DaprSSSS](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/bc8723/32.png) [@Renato\_DaprSSSS](https://www.ruby-forum.com/u/Renato_DaprSSSS)\
**Post date:** [June 5, 2010, 8:43am UTC](https://www.ruby-forum.com/t/has-many-through/189580/5 "2010-06-05T08:43:40Z")

</div>

Il giorno gio, 03/06/2010 alle 17.38 +0200, Andrea P. ha scritto:

> ciao Renato,
> 
> continuo a non avere molto chiaro quello che stai facendo, almeno a  
> livello di associazioni 😛
> 
> ad ogni modo posso indicarti un paio di strade:
> 
> - sei sicuro di aver bisogno di 3 modelli per gestire Nomi, Veicoli  
> ed un _TOT_ informazioni da associare? se riuscissi a scendere a 2,  
> ovviamente il problema non si porrebbe 😛

non credo sia possibile scendere a due associazioni in quanto il  
collegamento fra Nomi e Veicoli è “many to many”, più veicoli ad un  
nome e viceversa

> - dai uno sguardo alle NestedForms se vuoi inserire dati relativi a  
> più model attraverso una sola form. nel caso in cui tu voglia inserire  
> _N_ Veicoli per ciascun Nome, ma non sai _quanti_, dovrai smanazzare di  
> javascript per aggiungere nuove nested-forms. Un esempio calzante è  
> quando vuoi creare una galleria di foto: nella form per creare una  
> Gallery, aggiungi una nested-form per la Foto, poi con JS e qualche  
> elemento grafico crei un meccanismo di “aggiungi foto”. quando salverai  
> la galleria verranno caricate anche le N foto, tutte assieme.

Ho dato uno sguardo a NestedForm su railscasts e mi sembra un’ottima  
soluzione … ci provo …

Grazie, Renato.
