Salve a tt, è da un po che sto sviluppando un questionario on-line in
rails ora, il mio problema è che non riesco a far salvare i dati
all’interno del database. Premettendo che sto utilizzando la versione
1.2.5 di Rails e 1.8.5 di gem, il mio problema è che quando vado a
salvare all’interno del db mi viene generato questo messaggio d’errore:
Mysql::Error: Column ‘questionario_id’ cannot be null: INSERT INTO
dati_personalis (azienda
, contatto
, questionario_id
, cognome
,
nome
, created_at
) VALUES(‘Azienda SRL’, ‘023543454’, NULL, ‘Rossi’,
‘Mario’, ‘2008-01-25 17:19:03’)
in pratica le info vengono matenute in un cookie, dopo di che vengono
richiamate e salvate in delle varibili d’istanza, il problema e’ che
questionario_id e’ nullo e quindi i record non vengono salvati. Il
codice del controller e’:
def salvataggio_globale
@sessione = trova_sessione
@dati_personali = DatiPersonali.new
questionario = Questionario.new
@dati_personali = @sessione.ritorna_dati
@questionario = @sessione.ritorna_questionario
unless @dati_personali.save!
@questionario.dati_personali = @dati_personali#salvataggio
redirect_to(:action => 'index')
end
end
in cosa sbaglio? Ho letto che sè esiste un tipo di relazione 1 ad 1 tra
due tabelle bisogna dichiarare il model della tabella che contiene la
chiave esterna belong_to :nome_modello_tabella_figlia e per il model
della tabella figlia has_one :nome_modello_tabella_padre.
Nessuna idea a riguardo? Volevo almeno avere conferma che la procedura
di salvataggio per questo tipo di relazione fosse corretta…
Ettore J. r. wrote:
Nessuna idea a riguardo? Volevo almeno avere conferma che la procedura
di salvataggio per questo tipo di relazione fosse corretta…
Il problema probabilmente e’ nella migrazione della tabella
dati_personalis, che contiene il campo questionario_id dichiarato con
l’opzione :null => false
Con questa opzione, quando salvi l’oggetto @dati_personali la relazione
deve essere già impostata.
Quindi nel tuo caso la procedura corretta richiederebbe:
-
che l’oggetto @questionario sia salvato prima di @dati_personali (e
questo non è chiaro dal tuo codice, dove il questionario sembra preso
dalla sessione come oggetto pre-esistente, ma già salvato o no?), e
-
che @dati_personali.questionario sia impostato prima di
@dati_personali.save! : si tratta di impostare la relazione dalla parte
opposta, che tra l’altro ti salva un UPDATE su db
P.S. Perchè quelle due linee di codice?
@dati_personali = DatiPersonali.new
questionario = Questionario.new
Sembrano inutili, visto che nelle due righe successive prendi i dati
dalla sessione
Era proprio come dicevi tu, la relazione andava impostata prima e
@questionario non veniva salvato.
Il problema è che all’interno del testo in cui sto studiando il
salvataggio è spiegato in maniera errata e quindi per me era difficile
capire. A tal proposito hai qualche testo un po più valido da
consigliarmi? Non vorrei di nuovo incorrere in errori di questo tipo…
Grazie per l’aiuto, saluti.
Ettore J. r. wrote:
A tal proposito hai qualche testo un po più valido da
consigliarmi? Non vorrei di nuovo incorrere in errori di questo tipo…
Io ho studiato qualche anno fa sull’originale:
Dave T., David Heinemeier H.
“Agile Web D. with Rails”
(Pragmatic Bookshelf: By Developers, For Developers)
e l’ho trovato ottimo.
So che e’ uscita una versione aggiornata, ma prima di Rails 2.0.
Forse ora e’ meglio andare su:
Obie F.
“The Rails Way”
(http://www.amazon.co.uk/Rails-Way-Enterprise-Addison-Wesley-Professional/dp/0321445619)
Non l’ho letto di persona, ma su web ci sono ottime critiche.
Cmq leggiti questo post sul forum:
http://www.ruby-forum.com/topic/140235#new
ciao
io sto leggendo the rails way,
è estremamente affascinante e stimolante come libro,
non è un libro per principianti per un paio di motivi
- c’e un lungo elenco di prerequisiti sulle conoscenze di base
- ispirandosi a the Ruby Way non c’è il codice funzionante ma solo
le righe che servono per spiegare il concetto
Dopo essere arrivato al terzo capitolo,
ho sospeso e ho iniziato the ruby way
Ciao Paolo