Gestione di oggetti nulli

Può capitare che l’utente non compili un campo del form, e se io vi
accedo con

params[:table][:field] (e simili)

mi ritorna il dannato errore:

“You have a nil object when you didn’t expect it!
You might have expected an instance of Array.
The error occured while evaluating nil.[]”

Solo che trovo inconcepibile che se io faccio qualcosa tipo

if myobject.nil?

mi ritorni quell’errore se l’oggetto è nullo! A cosa serve la
condizione?

Mi sono spiegato?

On Sep 7, 2006, at 11:21 AM, Roberto C. wrote:

Solo che trovo inconcepibile che se io faccio qualcosa tipo

if myobject.nil?

mi ritorni quell’errore se l’oggetto è nullo! A cosa serve la
condizione?

Mi sono spiegato?

Meglio se copincolli il pezzo di codice incriminato…


Stefano C.
[email protected]

Non è proprio così… nel senso che stai interrogando una Hash di Hash…

params[:table][:field] è uguale a params.fetch(:table).fetch(:field)

che tu vuoi controllare a runtime con .nil? quindi:

if params.fetch(:table).fetch(:field).nil?

Probabilmente a te diventa nil il fetch(:table) quindi è plausibile che ti
dia l’errore. Per risolvere dovresti fare qualcosa tipo:

if params[:table]
… params[:table][:field]
end

che però inizia a essere stilisticamente bruttino. Di solito in rails si
passano i parametri al costruttore dell’activerecord e si gestiscono i
nil
con i validators…

t = Table.new(params[:table])
if t.valid? … etc etc

Spero di essere stato spiegato… :slight_smile:
Paolo

On 9/7/06, Roberto C. [email protected] wrote:

The error occured while evaluating nil.[]"

Posted via http://www.ruby-forum.com/.


Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml


Paolo D.’
SeeSaw | Another point of view

[email protected]

On 9/7/06, Roberto C. [email protected] wrote:

Può capitare che l’utente non compili un campo del form

Se non è un campo obbligatorio. Altrimenti puoi usare le validations (ad
esempio validates_presence_of)

, e se io vi

accedo con

params[:table][:field] (e simili)

mi ritorna il dannato errore:

Come ti hanno già suggerito, esistono metodi migliori per gestire la cosa,
ma se ti interessa solo evitare l’errore, puoi usare un semplice ‘rescue
nil’ o un ‘unless params[:table].nil?’.

Solo che trovo inconcepibile che se io faccio qualcosa tipo

if myobject.nil?

mi ritorni quell’errore se l’oggetto è nullo! A cosa serve la
condizione?

Se hai params[:a][:b], devi controllare che params[:a] non restituisca
nil.

Ciao,
Antonio