# Active record - problemi

**URL:** <https://www.ruby-forum.com/t/active-record-problemi/109241>\
**Category:** IT\
**Created:** [July 12, 2007, 4:47pm UTC](https://www.ruby-forum.com/t/active-record-problemi/109241 "2007-07-12T16:47:31Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Massimiliano\_Balest](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c5a1d2/32.png) [@Massimiliano\_Balest](https://www.ruby-forum.com/u/Massimiliano_Balest)\
**Post date:** [July 12, 2007, 4:47pm UTC](https://www.ruby-forum.com/t/active-record-problemi/109241/1 "2007-07-12T16:47:31Z")

</div>

ciao sto avendo seri problemi con activerecord.

la stringa “nome” è una parola riservata? si è una domanda stupida ma non  
capisco…

su una maschera non riesco a stampare il campo nome.  
mi dice metodo non definito:

dump:

— !ruby/object:Risorsa  
attributes:  
nome: Massimiliano Balestrieri  
tel: 011729980219  
id: 10000  
matricola: “5555”

questo lo ottengo con

\<%= debug compito.risorsa %\> (risorsa è la tabella collegata)

\<%= compito.risorsa.tel %\>

viene  
il numero di telefono

\<%= compito.risorsa.nome %\>

viene undefinited method.

non so. fuori non vedo elefanti rosa che volano.  
ciao e grazie

---

<div class="post-metadata">

**Author:** ![Massimiliano\_Balest](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c5a1d2/32.png) [@Massimiliano\_Balest](https://www.ruby-forum.com/u/Massimiliano_Balest)\
**Post date:** [July 12, 2007, 4:53pm UTC](https://www.ruby-forum.com/t/active-record-problemi/109241/2 "2007-07-12T16:53:33Z")

</div>

adesso funziona.  
non so.

da quello che ho finora compreso, activerecord carica i join in  
automatico.  
o meglio tu nella view in qualsiasi momento puoi stampare un dato  
presente  
in una tabella di anagrafica collegata.

ordine.cliente.nome

partita.squadra.citta

e così via

sarà perchè nelle 5 tabelle del progettino che sto realizzando ho per ogni  
tabella un campo che si chiama “nome”?

ho letto le convenzioni su id, tabella\_id, minuscolo, ma quella di campi  
di  
tabelle sempre univoci no.

grazie max

---

<div class="post-metadata">

**Author:** ![Massimiliano\_Balest](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c5a1d2/32.png) [@Massimiliano\_Balest](https://www.ruby-forum.com/u/Massimiliano_Balest)\
**Post date:** [July 12, 2007, 5:07pm UTC](https://www.ruby-forum.com/t/active-record-problemi/109241/3 "2007-07-12T17:07:35Z")

</div>

Massimiliano Balestrieri ha scritto:

> sarà perchè nelle 5 tabelle del progettino che sto realizzando ho per ogni  
> tabella un campo che si chiama “nome”?

Non  
è così.

Ricorda che per “navigare” le relazioni tra classi, devi utilizzare le  
apposite macro. ES:

tabelle  
authors(id, first\_name, last\_name)  
posts(id, title, author\_id)

class Author  
has\_many :posts  
end

class Post  
belongs\_to :author  
end

author.posts #=\> Ritorna la collezione di posts appartenenti all’autore  
specificato

post.author #=\> Ritorna l’oggetto Author per il post specificato

---

<div class="post-metadata">

**Author:** ![Massimiliano\_Balest](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c5a1d2/32.png) [@Massimiliano\_Balest](https://www.ruby-forum.com/u/Massimiliano_Balest)\
**Post date:** [July 12, 2007, 5:14pm UTC](https://www.ruby-forum.com/t/active-record-problemi/109241/4 "2007-07-12T17:14:35Z")

</div>

Il 12/07/07, Luca G. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha scritto:

> apposite macro. ES:  
> belongs\_to :author  
> end

chiaramente.  
ho usato le macro.  
e ho le relazioni sul db.  
è oracle.(non vorrei fossero anomalie dell’adapter.)

---

<div class="post-metadata">

**Author:** ![Massimiliano\_Balest](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c5a1d2/32.png) [@Massimiliano\_Balest](https://www.ruby-forum.com/u/Massimiliano_Balest)\
**Post date:** [July 12, 2007, 5:29pm UTC](https://www.ruby-forum.com/t/active-record-problemi/109241/5 "2007-07-12T17:29:36Z")

</div>

è l’adapter.  
per forza.  
\<%= debug att.compiti %\> # fin qui funge  
\<% if att.compiti -%\> # qui spacca. se lo commento funge  
\<% end %\>

la struttura è

progetto

stampo i dati del progetti.

salgo (se si può dire così) sulla tabella cliente e stampo. straordinaria  
questa cosa.

progetto.cliente e wow tutti i dati

class Progetto \< ActiveRecord::Base  
belongs\_to :cliente  
has\_many :attivita

class Cliente \< ActiveRecord::Base  
has\_many :progetti

poi sotto ciclo le attività

perfetto

\<% if @progetto.attivita -%\>

  
\<% for att in @progetto.attivita -%\>

poi arrivo alle attività. e dico vabbe non riusciro ad avere la tabella  
figlia ancora!

```
           <%= debug att.compiti %>

```

stampa

* * *

- !ruby/object:Compito  
attributes:  
descrizione: Analisi - BO  
id: 10000  
risorsa\_id: 10000  
note: |-  
wiki all’url:

- !ruby/object:Compito  
attributes:  
descrizione: Analisi - FO  
id: 10021  
risorsa\_id: 10000  
note: a  
attivita\_id: 10000

ma se scrivo  
\<% if att.compiti -%\>

undefined method `compiti’ for Attivita:Class

class Attivita \< ActiveRecord::Base  
has\_many :compiti

provo a rigenerare il progetto in mysql e ti dico se il problema si  
ripresenta.

---

<div class="post-metadata">

**Author:** ![Massimiliano\_Balest](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c5a1d2/32.png) [@Massimiliano\_Balest](https://www.ruby-forum.com/u/Massimiliano_Balest)\
**Post date:** [July 13, 2007, 11:49am UTC](https://www.ruby-forum.com/t/active-record-problemi/109241/6 "2007-07-13T11:49:00Z")

</div>

Grazie Luca,

(complimenti a tutta la lista, veramente una bella community,  
soprattutto  
preparata e disponibile)

sbagliavo io anche qui (ovviamente… si potrebbe anche sottointendere).

mettevo il plurale e non il singolare nelle macro belongs\_to e  
have\_many.

corretto tutto. funziona e gira bene sia con oracle sia con mysql  
(differiscono solamente con il campo “date” ma lo risolverò con + calma +  
avanti).

grazie e ciao.

---

<div class="post-metadata">

**Author:** ![Massimiliano\_Balest](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c5a1d2/32.png) [@Massimiliano\_Balest](https://www.ruby-forum.com/u/Massimiliano_Balest)\
**Post date:** [July 12, 2007, 7:34pm UTC](https://www.ruby-forum.com/t/active-record-problemi/109241/7 "2007-07-12T19:34:56Z")

</div>

Credo che il problema sia un altro, le convenzioni sulla pluralizzazione  
dei nomi funzionano con l’inglese (di default), può darsi che qualche  
macro fallisca in modo silente.  
Può darsi che non vada a buon fine #singularize sul symbol :compiti.  
Infatti le altre relazioni funzionano  
perché:  
class Progetto \< ActiveRecord::Base  
belongs\_to :cliente # Nota 1  
has\_many :attivita # Nota 2  
end

Nota 1: qui non effettua nulla, quindi riesce a trovare Cliente  
Nota 2: qui prova a singolarizzare, ma non riesce a farlo bene. Fortuna  
vuole che ritorni la stringa ‘attivita’ cioè il nome della classe.

class Attivita \< ActiveRecord::Base  
has\_many :compiti # Nota 3  
end

Nota 3: questo caso è simile alla Nota 2, solo che stavolta la stringa  
restituita non corrisponde a nessuna classe

Può darsi sia questa la ragione, non so, ora non ho tempo per approfondire.

Ad ogni modo, prova con Attivita.columns\_hash per ottenere tutte colonne  
del db che sono mappate dalla classe.

LG
