# Creare un index composto da due tabelle

**URL:** <https://www.ruby-forum.com/t/creare-un-index-composto-da-due-tabelle/193190>\
**Category:** IT\
**Created:** [August 12, 2010, 7:56pm UTC](https://www.ruby-forum.com/t/creare-un-index-composto-da-due-tabelle/193190 "2010-08-12T19:56:23Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![fdibenedetto72](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/8491ac/32.png) [@fdibenedetto72](https://www.ruby-forum.com/u/fdibenedetto72)\
**Post date:** [August 12, 2010, 7:56pm UTC](https://www.ruby-forum.com/t/creare-un-index-composto-da-due-tabelle/193190/1 "2010-08-12T19:56:23Z")

</div>

Salve a tutti dovrei creare nella pagina index un semplice elenco  
composto da dati provenienti da due tabelle  
esempio :  
Tabella Utentis Tabella Tipoutentis  
id,nome,cognome,idtipo id,descrizione

nel model utenti ho inserito

class Utenti \< ActiveRecord::Base  
has\_and\_belongs\_to\_many :tipoutentis  
end

nel model Tipoutenti ho inserito

class Tipoutenti \< ActiveRecord::Base  
has\_and\_belongs\_to\_many :utentis  
end

nel controller utentis  
def index  
@utentis = Utenti.find(:all, :include=\> :tipoutentis)

```
respond_to do |format|
  format.html # index.html.erb
  format.xml { render :xml => @utentis }
end

```

end

nela view index ho inserito il seguente codice  
\<% @utentis.each do |utenti| %\>

 \<%=h utenti.id %\> \<%=h utenti.cognome\_note %\> \<%=h utenti.idtipo %\> \<%=h utenti.tipoutentis.descrizione %\> \<% end %\>  

provato va in errore ma dov’e l’errore ???  
mi potete aiutare ?? grazie mille

---

<div class="post-metadata">

**Author:** ![fdibenedetto72](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/8491ac/32.png) [@fdibenedetto72](https://www.ruby-forum.com/u/fdibenedetto72)\
**Post date:** [August 13, 2010, 9:29am UTC](https://www.ruby-forum.com/t/creare-un-index-composto-da-due-tabelle/193190/2 "2010-08-13T09:29:49Z")

</div>

Sarebbe meglio leggersi almeno le API…

1. has\_and\_belongs\_to\_many non Ã¨ il tipo adatto per questa relazione, Ã¨  
una relazione di tipo n a n non 1 a n come risulta essere la tua.

2. gli standard di rails prevedono che la colonna di collegamento fra i  
due models sia strutturata cosÃ¬ [nome\_tabella]\_id la tua esce dallo  
standard quindi devi specificarla a mano

Non ti scrivo come devi fare il codice, altrimenti sei punto a capo la  
prossima volta (cone le due osservazioni dovresti trovare la soluzione  
facilmente sulle api di active\_record)

Fabio Di benedetto wrote:

> provato va in errore ma dov’e l’errore ???  
> mi potete aiutare ?? grazie mille

---

<div class="post-metadata">

**Author:** ![fdibenedetto72](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/8491ac/32.png) [@fdibenedetto72](https://www.ruby-forum.com/u/fdibenedetto72)\
**Post date:** [August 13, 2010, 12:31pm UTC](https://www.ruby-forum.com/t/creare-un-index-composto-da-due-tabelle/193190/3 "2010-08-13T12:31:09Z")

</div>

Ciao Alessandro,  
ho cambiato nella tabella utentis l’id di collegamento mettendo  
tipoutentis\_id nei model rispettivamente ho inserito

class Utenti \< ActiveRecord::Base  
has\_many :tipoutentis  
end

nel model Tipoutenti ho inserito

class Tipoutenti \< ActiveRecord::Base  
belongs\_to :utentis  
end

quindi nell index di utentis  
ho inserito  
@utentis = Utenti.find(:all, :include=\> :tipoutentis)

ma il risultato non cambia mi dice sempre ?  
mi potresti postare la soluzione francamente con un esempio funzinante e  
la guida ci posso capire meglio!  
Saluti fdibenedetto

le due clausole belong\_to  
Alessandro S. wrote:

> Sarebbe meglio leggersi almeno le API…
> 
> 1. has\_and\_belongs\_to\_many non Ã¨ il tipo adatto per questa relazione, Ã¨  
> una relazione di tipo n a n non 1 a n come risulta essere la tua.
> 
> 2. gli standard di rails prevedono che la colonna di collegamento fra i  
> due models sia strutturata cosÃ¬ [nome\_tabella]\_id la tua esce dallo  
> standard quindi devi specificarla a mano
> 
> Non ti scrivo come devi fare il codice, altrimenti sei punto a capo la  
> prossima volta (cone le due osservazioni dovresti trovare la soluzione  
> facilmente sulle api di active\_record)
> 
> Fabio Di benedetto wrote:
> 
> > provato va in errore ma dov’e l’errore ???  
> > mi potete aiutare ?? grazie mille

---

<div class="post-metadata">

**Author:** ![fdibenedetto72](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/8491ac/32.png) [@fdibenedetto72](https://www.ruby-forum.com/u/fdibenedetto72)\
**Post date:** [August 13, 2010, 1:57pm UTC](https://www.ruby-forum.com/t/creare-un-index-composto-da-due-tabelle/193190/4 "2010-08-13T13:57:08Z")

</div>

ciao Fabio,

un consiglio per evitare di incasinarti la vita, soprattutto se sei alle  
prime armi, è quello di seguire le convenzioni usate da rails (come già  
accennato da Alessandro). nel tuo caso, comincia ad usare nomi di  
tabelle in inglese, perchè vengono gestite meglio (già con termini  
plurali e singolari ad esempio).

la seconda cosa, è di leggere un po’ di documentazione. probabilmente  
troverai molto utili le guide che trovi qui:

> **[Ruby on Rails Guides](https://guides.rubyonrails.org/index.html)**
>
> Ruby on Rails Guides

terzo ed ultimo consiglio: se vuoi aiuto, incolla almeno l’errore che  
hai ricevuto 😉

venendo al tuo problema, a occhio, hai sbagliato almeno la dichiarazione  
in Tipoutenti:

belongs\_to :utenti

perchè è singolare, cioè un Tipoutente appartiene a un Utente. sempre a  
occhio, credo che la relazione sia al contrario: un utente appartiene ad  
un tipo\_utente, mentre un tipoutente può avere più utenti 😉

hai anche sbagliato la dichiarazione delle classi. il nome di un model è  
al singolare, cioè Utente e Tipoutente, la tabella invece è al plurale  
perchè contiene più record di un certo tipo. rails incoraggia un  
approccio discorsivo, in pseudo-codice o a voce, diresti:

- un Tipoutente ha\_molti Utenti
- un Utente appartiene\_a un Tipoutente
- seleziona un Utente con id 1 dalla tabella ‘utenti’
- etc…

ciao,  
A.

Il 13/08/2010 12:31, Fabio Di benedetto ha scritto:

---

<div class="post-metadata">

**Author:** ![fdibenedetto72](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/8491ac/32.png) [@fdibenedetto72](https://www.ruby-forum.com/u/fdibenedetto72)\
**Post date:** [August 13, 2010, 3:24pm UTC](https://www.ruby-forum.com/t/creare-un-index-composto-da-due-tabelle/193190/5 "2010-08-13T15:24:10Z")

</div>

Ciao Andrea,  
vediamo se ho capito

class Tipoutenti \< ActiveRecord::Base  
has\_many :utentis  
end

class Utenti \< ActiveRecord::Base  
belongs\_to :tipoutenti  
end

class UtentisController \< ApplicationController

# GET /utentis

# GET /utentis.xml

def index  
@utentis = Utenti.all(:include =\> :tipoutenti)  
respond\_to do |format|  
format.html # index.html.erb  
format.xml { render :xml =\> @utentis }  
end  
end  
…  
l’errore che mi configura e’  
undefined method `tipoutentis\_id’ for #\<Utenti id: 6, cognome\_note:  
“fabio”, tipoutenti\_id: 1\>

grazie sempre per la tua pazienza !!!

Andrea P. wrote:

> ciao Fabio,
> 
> un consiglio per evitare di incasinarti la vita, soprattutto se sei alle  
> prime armi, ï¿½ quello di seguire le convenzioni usate da rails (come giï¿½  
> accennato da Alessandro). nel tuo caso, comincia ad usare nomi di  
> tabelle in inglese, perchï¿½ vengono gestite meglio (giï¿½ con termini  
> plurali e singolari ad esempio).
> 
> la seconda cosa, ï¿½ di leggere un po’ di documentazione. probabilmente  
> troverai molto utili le guide che trovi qui:
> 
> [Ruby on Rails Guides](http://guides.rubyonrails.org/index.html)
> 
> terzo ed ultimo consiglio: se vuoi aiuto, incolla almeno l’errore che  
> hai ricevuto 😉
> 
> venendo al tuo problema, a occhio, hai sbagliato almeno la dichiarazione  
> in Tipoutenti:
> 
> belongs\_to :utenti
> 
> perchï¿½ ï¿½ singolare, cioï¿½ un Tipoutente appartiene a un Utente. sempre a  
> occhio, credo che la relazione sia al contrario: un utente appartiene ad  
> un tipo\_utente, mentre un tipoutente puï¿½ avere piï¿½ utenti 😉
> 
> hai anche sbagliato la dichiarazione delle classi. il nome di un model ï¿½  
> al singolare, cioï¿½ Utente e Tipoutente, la tabella invece ï¿½ al plurale  
> perchï¿½ contiene piï¿½ record di un certo tipo. rails incoraggia un  
> approccio discorsivo, in pseudo-codice o a voce, diresti:
> 
> - un Tipoutente ha\_molti Utenti
> - un Utente appartiene\_a un Tipoutente
> - seleziona un Utente con id 1 dalla tabella ‘utenti’
> - etc…
> 
> ciao,  
> A.
> 
> Il 13/08/2010 12:31, Fabio Di benedetto ha scritto:

---

<div class="post-metadata">

**Author:** ![fdibenedetto72](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/8491ac/32.png) [@fdibenedetto72](https://www.ruby-forum.com/u/fdibenedetto72)\
**Post date:** [August 13, 2010, 3:49pm UTC](https://www.ruby-forum.com/t/creare-un-index-composto-da-due-tabelle/193190/6 "2010-08-13T15:49:47Z")

</div>

Risolto il problema i questo modo

class Tipoutenti \< ActiveRecord::Base  
has\_many :utentis  
end

class Tipoutenti \< ActiveRecord::Base  
has\_many :utentis  
end

class UtentisController \< ApplicationController

# GET /utentis

# GET /utentis.xml

def index  
@utentis = Utenti.find(:all ,:include =\> :tipoutenti)  
respond\_to do |format|  
format.html # index.html.erb  
format.xml { render :xml =\> @utentis }  
end  
end  
…

\<% @utentis.each do |utenti| %\>

 \<%=h utenti.id %\> \<%=h utenti.cognome\_note %\> \<%=h utenti.tipoutenti\_id %\> \<%=h utenti.tipoutenti.descrizione %\> ......

Grazei ragazzi per i suggerimenti dopo 20 anni di onorato vb6 ed asp  
inizio a cimentarmi in RAILS tra libri e aiuti validi spero di riuscire  
a essere indipendente quanto prima e di poter poter contare sempre di  
Voi.

Saluti e buon ferragosto!  
fdibenedetto

Fabio Di benedetto wrote:

> Ciao Andrea,  
> vediamo se ho capito
> 
> class Tipoutenti \< ActiveRecord::Base  
> has\_many :utentis  
> end
> 
> class Utenti \< ActiveRecord::Base  
> belongs\_to :tipoutenti  
> end
> 
> class UtentisController \< ApplicationController
> 
> # GET /utentis
> 
> # GET /utentis.xml
> 
> def index  
> @utentis = Utenti.all(:include =\> :tipoutenti)  
> respond\_to do |format|  
> format.html # index.html.erb  
> format.xml { render :xml =\> @utentis }  
> end  
> end  
> …  
> l’errore che mi configura e’  
> undefined method `tipoutentis\_id’ for #\<Utenti id: 6, cognome\_note:  
> “fabio”, tipoutenti\_id: 1\>
> 
> grazie sempre per la tua pazienza !!!
> 
> Andrea P. wrote:
> 
> > ciao Fabio,
> > 
> > un consiglio per evitare di incasinarti la vita, soprattutto se sei alle  
> > prime armi, ï¿½ quello di seguire le convenzioni usate da rails (come giï¿½  
> > accennato da Alessandro). nel tuo caso, comincia ad usare nomi di  
> > tabelle in inglese, perchï¿½ vengono gestite meglio (giï¿½ con termini  
> > plurali e singolari ad esempio).
> > 
> > la seconda cosa, ï¿½ di leggere un po’ di documentazione. probabilmente  
> > troverai molto utili le guide che trovi qui:
> > 
> > [Ruby on Rails Guides](http://guides.rubyonrails.org/index.html)
> > 
> > terzo ed ultimo consiglio: se vuoi aiuto, incolla almeno l’errore che  
> > hai ricevuto 😉
> > 
> > venendo al tuo problema, a occhio, hai sbagliato almeno la dichiarazione  
> > in Tipoutenti:
> > 
> > belongs\_to :utenti
> > 
> > perchï¿½ ï¿½ singolare, cioï¿½ un Tipoutente appartiene a un Utente. sempre a  
> > occhio, credo che la relazione sia al contrario: un utente appartiene ad  
> > un tipo\_utente, mentre un tipoutente puï¿½ avere piï¿½ utenti 😉
> > 
> > hai anche sbagliato la dichiarazione delle classi. il nome di un model ï¿½  
> > al singolare, cioï¿½ Utente e Tipoutente, la tabella invece ï¿½ al plurale  
> > perchï¿½ contiene piï¿½ record di un certo tipo. rails incoraggia un  
> > approccio discorsivo, in pseudo-codice o a voce, diresti:
> > 
> > - un Tipoutente ha\_molti Utenti
> > - un Utente appartiene\_a un Tipoutente
> > - seleziona un Utente con id 1 dalla tabella ‘utenti’
> > - etc…
> > 
> > ciao,  
> > A.
> > 
> > Il 13/08/2010 12:31, Fabio Di benedetto ha scritto:

---

<div class="post-metadata">

**Author:** ![fdibenedetto72](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/8491ac/32.png) [@fdibenedetto72](https://www.ruby-forum.com/u/fdibenedetto72)\
**Post date:** [August 13, 2010, 3:51pm UTC](https://www.ruby-forum.com/t/creare-un-index-composto-da-due-tabelle/193190/7 "2010-08-13T15:51:53Z")

</div>

ciao di nuovo Fabio,

l’errore che hai ricevuto è riferito al fatto che nel db non hai un  
campo chiamato ‘tipoutentis\_id’, ma ne hai uno ‘tipoutenti\_id’. ti  
ricordo inoltre che i nomi che stai usando potrebbero facilmente  
portarti a errori tuoi (perchè ti confondi) o di rails che potrebbe  
interpretare male i plurali/singolari, oltre al fatto che leggendo il  
codice, a livello cognitivo stonerebbe parecchio 😉

l’ideale, sarebbe ri-scrivere i modelli (e le migrazioni) in questo  
modo:

# definisco una classe che rappresenta il modello Utente

class User \< ActiveRecord::Base  
belongs\_to :usertype  
end

# definisco una classe che rappresenta il modello Tipoutente

class Usertype \< ActiveRecord::Base  
has\_many :users  
end

nel controller il codice non cambierebbe di molto:

def index  
# seleziono tutti gli User nel database ed assegno il risultato alla  
variabile @utenti  
@utenti = User.all(:include =\> :usertypes)  
respond\_to do |format|  
format.html # index.html.erb  
format.xml { render :xml =\> @utenti }  
end  
end

nessuno ti vieta di usare l’italiano nel codice (anche se l’inglese  
sarebbe meglio), tuttavia cerca di rispettare almeno le semplici  
convenzioni/regole di rails 😉

comunque, tieni sempre presente che sviluppare un’applicazione web con  
ruby e rails, fondamentalmente non è diverso dall’usare un qualsiasi  
altro linguaggio o framework: semplicemente ti agevola nello svolgere i  
task (portando numerosi vantaggi pratici, ammesso che segui alcune  
regole, è pur sempre un framework!), ma non significa che permette di  
scrivere applicazioni web senza possedere le conoscenze necessarie a  
farlo, per esempio, con PHP o [ASP.NET](http://ASP.NET) 😛

ciao,  
A.

Il 13/08/2010 15:24, Fabio Di benedetto ha scritto:
