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
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
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.