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