Chiave esterna rimane NIL

Ho un problema con un record che non viene salvato - quando viene creato
nuovo - con la corrispondente chiave esterna.
Mostro il codice e poi qualche spiegazione:

def new_lavoro
@ilcandidato = session[‘user’] # aggiunto per una verifica
@ilcandidato2 = session[‘user’].id # aggiunto per una verifica
@lavoro = Lavori.new(:user => @ilcandidato)
end

def create_lavoro
@lavoro = Lavoro.new(params[:lavoro])
@user = User.find(@session[‘user’].id)

@lavoro.titolo = “Spazzino” # reimposta correttamente!!

@lavoro.user = @session['user']
@lavoro.user.id = 1  # ... continua a rimanere NIL...


if @lavoro.save
  flash[:notice] = 'Lavoro &egrave stato creato con successo.'
  redirect_to :action => 'edit_info'
else
  render :action => 'new_lavoro'
end

end

In pratica ‘lavoro’ viene sempre salvato con tutti i campi corretti
(come sono stati inseriti) tranne che per user che continua ad essere
NIL. Come si vede dal codice ho provato anche a imporre l’id di lavoro
ma nulla da fare…

Il modello ‘Lavoro’ contiene la relazione ‘belongs_to :user’, mentre il
modello ‘User’ contiene la relazione ‘has_many :lavori’.

Qualche idea?

Grazie mille per l’aiuto

@lavoro.user, per ricavare il valore, esegue una query sul db, quindi
fallisce, perché non hai ancora persistito quella relazione. Quindi devi
prima salvare @lavoro, poi puoi chiedergli di restituirti il relativo
user.

Luca

No, il codice era corretto. Ho risolto (sono rimasto fermo oltre 5 ore
su questa cosuccia…)

Nell’associazione “belongs_to :user” mancava la specificazione
":foreign_key => “user”!!! Non era necessaria se la chiave esterna fosse
stata “user_id”. Ero consapevole della cosa, ma convinto che il nome
dell’attributo fosse corretto… sigh!

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs