Active record - problemi

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

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

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

Il 12/07/07, Luca G. [email protected] 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.)

è 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:

    perseo:8080
    

    attivita_id: 10000

  • !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.

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.

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