# Chiave esterna rimane NIL

**URL:** <https://www.ruby-forum.com/t/chiave-esterna-rimane-nil/133557>\
**Category:** IT\
**Created:** [April 1, 2008, 5:04pm UTC](https://www.ruby-forum.com/t/chiave-esterna-rimane-nil/133557 "2008-04-01T17:04:42Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![1w4n](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/1/65b543/32.png) [@1w4n](https://www.ruby-forum.com/u/1w4n)\
**Post date:** [April 1, 2008, 5:04pm UTC](https://www.ruby-forum.com/t/chiave-esterna-rimane-nil/133557/1 "2008-04-01T17:04:42Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![1w4n](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/1/65b543/32.png) [@1w4n](https://www.ruby-forum.com/u/1w4n)\
**Post date:** [April 1, 2008, 5:52pm UTC](https://www.ruby-forum.com/t/chiave-esterna-rimane-nil/133557/2 "2008-04-01T17:52:31Z")

</div>

@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

---

<div class="post-metadata">

**Author:** ![1w4n](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/1/65b543/32.png) [@1w4n](https://www.ruby-forum.com/u/1w4n)\
**Post date:** [April 2, 2008, 9:34am UTC](https://www.ruby-forum.com/t/chiave-esterna-rimane-nil/133557/3 "2008-04-02T09:34:46Z")

</div>

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!
