Ciao a tutti,
ho il seguente problema
C L A S S I
class Quotation
has_many: fases
end
class Fase
belongs_to: quotation
end
nella tabella quotations c’è il campo fase_id.
la tabella fases è costituita da due campi:
id
descrizione
P R O B L E M A
quando vado a visualizzare il contenuto di quotations vorrei
visualizzare invece che quotation.fase_id (che è un numero)
quotation.fase.descrizione
ma rails mi dice che: “fase, undefined method”.
Cosa devo mettere nel controller di quotation per ottenere la
descrizione di fase ?
Un grazie a tutti, ciao
2010/11/3 An Car [email protected]:
class Quotation
has_many: fases
end
class Fase
belongs_to: quotation
end
nella tabella quotations c’ il campo fase_id.
non dovrebbe invece esserci quotation_id in fase?
P R O B L E M A
quando vado a visualizzare il contenuto di quotations vorrei
visualizzare invece che quotation.fase_id (che un numero)
quotation.fase.descrizione
ma rails mi dice che: “fase, undefined method”.
si perch quotation has_many: fases
er
forse ci sono un po’ di errori di impostazione
- se Quotation “has_many” Fases, perch il campo ‘fase_id’ nella
tabella quotations? semmai dovrebbe essere la tabella ‘fases’ ad avere
un campo ‘quotation_id’. Oppure devi invertire la dichiarazione nelle
due classi e dire:
‘Quotation belongs_to Fase’ e ‘Fase has_many Quotations’
quindi tutto dipende da cosa devi fare
- in ogni caso, se Fase ‘has_many’ Quotations, allora dovrai scrivere:
quotation.fase # Quotation ha un Fase di riferimento
fase.quotations # Fase ha un array di Quotations
spero ti sia pi chiaro
A.
Il 03/11/2010 18:46, An Car ha scritto:
2010/11/4 An Car [email protected]:
Mi s che ho esposto la cosa in modo confuso.
In realt la tabella fases una tabella di “appoggio” ovvero contiene i
5 passaggi che un quotation (budget preventivo) deve avere.
Ricapitolando:
un quotation deve necessariamente avere 5 fases
quindi quotation ha 5 fases… e se non ho capito male la tabella fases
contiene 5 record in tutto giusto? quindi non molti-a-molti.
quindi in teoria con i modelli che hai scritto tu:
q= Quotation.where…
q.fases # dovrebbe contenere un’array di 5 fasi
non che le fasi sono gli stati di una quotation? in quel caso dai
un’occhiata a http://slagyr.github.com/statemachine/
cheers
ER
buon giorno a tutti.
io ho lo stesso problema ma su una relazione molti a molti…
ho la tabella users e la tabella posts (relazione n:m) collegati tra
loro con una tabella di join chiamata relations.
nel model user ho scritto:
has_many :relations
has_many :posts , :through => :relations
nel modello post:
has_many :relations
has_many :users , :through => :relations
nel modello relation:
belongs_to :post
belongs_to :user
la tab relations ha al suo interno user_id e post_id.
quando va ad eseguire questo metodo scritto nel modello post:
def Post.find_user_per_post(arg)
po=Post.find(:all,:conditions=>[“category=?”,arg])
@posts=po.users
end
mi da errore e dice che non esiste un metodo ‘users’ per l array
ritornato!!
Sono alle prime armi con rails e questa è un applicazioncina di prova
per avere un po di dimestichezza con il db, quindi chiedo a voi esperti.
ps.: ho provato sia con mysql che con sqllite3 credendo che fosse un
problema di db ma purtroppo la situazione è sempre la stessa…
2010/11/18 Federico L. [email protected]:
def Post.find_user_per_post(arg)
po=Post.find(:all,:conditions=>[“category=?”,arg])
@posts=po.users
end
mi da errore e dice che non esiste un metodo ‘users’ per l array
ritornato!!
Appunto. find :all torna un array! il fatto che esista il metodo
.users per i singoli membri dell’array non vuol dire che esista per
l’array stesso, anzi in genere non e’ cosi’, come puoi chiedere il
nome a una persona ma non a una fila di persone
Ovvero, potresti fare:
@posters = po.map { |p| p.users }.flatten.uniq
(ovvero raccogliere gli utenti dei vari post trovati in un array di
array, renderlo un unico array unidimensionale, e poi eliminare i
duplicati.
A dire il vero, a prescindere dal problema da te riscontrato, noto due
o tre cose strane:
- chiami il metodo Post.find_user_per_post(arg) ma con ogni evidenza
il parametro e’ una category, e trova utenti che hanno postato in
quella category… ovvero non converrebbe chiamarlo
all_posters_for_category??
- quando assegni alla variabile di istanza, dici posts = po.users…
avere una variabile che si chiama “pere” e metterci dentro delle mele
e’ una ricetta per il disastro!
- Non e’ chiaro neanche a me quale sia il comportamento usando una
instance variabile (quelle con una @) dentro un metodo di classe, ma
penso non faccia quello che vuoi tu.
Saluti!
Appunto. find :all torna un array! il fatto che esista il metodo
.users per i singoli membri dell’array non vuol dire che esista per
l’array stesso, anzi in genere non e’ cosi’, come puoi chiedere il
nome a una persona ma non a una fila di persone
GRAZIE! non ci avevo proprio pensato! ora che me l hai fatto notare è un
po strano quello che ho scritto…
- chiami il metodo Post.find_user_per_post(arg) ma con ogni evidenza
il parametro e’ una category, e trova utenti che hanno postato in
quella category… ovvero non converrebbe chiamarlo
all_posters_for_category??
- quando assegni alla variabile di istanza, dici posts = po.users…
avere una variabile che si chiama “pere” e metterci dentro delle mele
e’ una ricetta per il disastro!
- Non e’ chiaro neanche a me quale sia il comportamento usando una
instance variabile (quelle con una @) dentro un metodo di classe, ma
penso non faccia quello che vuoi tu.
si lo so e mi scuso…i nomi delle variabili e dei metodi non sono molto
appropriati(oserei dire che fanno riferimento a tutt altro!) ma a furia
di cambiare e ricambiare il codice ho fatto un pasticcio unico!
comunque grazie mille delle delucidazioni. ora va tutto come deve andare
(ovviamente riscriverò la mini-applicazione in modo meno
confusionario.
Andrea P. wrote in post #959088:
forse ci sono un po’ di errori di impostazione
- se Quotation “has_many” Fases, perch il campo ‘fase_id’ nella
tabella quotations? semmai dovrebbe essere la tabella ‘fases’ ad avere
un campo ‘quotation_id’. Oppure devi invertire la dichiarazione nelle
due classi e dire:
‘Quotation belongs_to Fase’ e ‘Fase has_many Quotations’
quindi tutto dipende da cosa devi fare
- in ogni caso, se Fase ‘has_many’ Quotations, allora dovrai scrivere:
quotation.fase # Quotation ha un Fase di riferimento
fase.quotations # Fase ha un array di Quotations
spero ti sia pi chiaro
A.
Il 03/11/2010 18:46, An Car ha scritto:
Mi sà che ho esposto la cosa in modo confuso.
In realtà la tabella fases è una tabella di “appoggio” ovvero contiene i
5 passaggi che un quotation (budget preventivo) deve avere.
Ricapitolando:
un quotation deve necessariamente avere 5 fases (e per ciasuna delle
fases ci sono un quindicina circa di underfases [perdona il miscuglio di
italiano e inglese maccheronico]).
In sostanza la mia domanda è: nel caso di tabelle come fases e
underfases (tabelle che “cablano” le possibili scelte dell’utente
finale) o se si preferisce l’esempio di tabelle quali quelle di
provincie e relativi comuni (uno sceglie la provincia e poi, in base
alla provincia scelta, compare una lista di comuni appartenenti a quella
provincia) come faccio a risalire alla parte descrittiva (in nome della
fase o della provincia) avendo a disposizione solo l’id nella tabella
dei dati significativi (nel mio caso la tabella quotation, nel caso
delle provincie/comuni la tabella con dati anagrafici dell’utente
finale).
Spero di essere riuscito a spiegarmi meglio.