Problema con @user.save


#1

Salve,

sto impazzendo con le seguenti righe di codice:

@user = User.find(params[:id])

if @user && @user.status == ‘not_verified’ && @user.activation_code ==
params[:code]
@user.status = ‘active’

unless @user.save
flash[:notice] = “Impossibile attivare l’account.”
redirect_to :controller => ‘welcome’
end

else
flash[:notice] = “L’account è già attivo…”
redirect_to :controller => ‘welcome’
end

Continuo ad ottenere “Impossibile attivare l’account”. Cos’è che mi
sfugge in quell’@user.save?

Ecco cosa ottengo nel log degli errori:

Processing AccountController#activate (for 127.0.0.1 at 2008-11-09
19:31:35) [GET]
Session ID:
BAh7CDoMY3NyZl9pZCIlYjFjZDg4NWI2N2YwY2IxODdkMjQ2YTAwMzZiMzc3
OWQ6DHVzZXJfaWRpCiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxh
c2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7AA==–62b26d3b43dc88e45ccf3c108fe9790c88f5173e
Parameters: {“code”=>“UvJCLYhqdOo89ixzLt6X”, “action”=>“activate”,
“id”=>“4”, “controller”=>“account”}
e[4;35;1mUser Load (0.000227)e[0m e[0mSELECT * FROM “users” WHERE
(“users”.“id” = 4) e[0m
e[4;36;1mSQL (0.000086)e[0m e[0;1mSELECT “email” FROM “users” WHERE
(“users”.email = ‘removed_email_address@domain.invalid’ AND “users”.id <> 4) e[0m
Redirected to http://localhost:3000/
Completed in 0.00958 (104 reqs/sec) | DB: 0.00031 (3%) | 302 Found
[http://localhost/account/4/activate/UvJCLYhqdOo89ixzLt6X]

Grazie


#2

On Sun, Nov 9, 2008 at 1:39 PM, Marco C. removed_email_address@domain.invalid
wrote:

Continuo ad ottenere “Impossibile attivare l’account”. Cos’è che mi
sfugge in quell’@user.save?

Probabilmente c’è qualche validation che fa fallire il salvataggio. Prova
a
valutare @user.errors dopo il tentativo fallito di salvataggio.

Ciao,
Antonio

http://antoniocangiano.com - Zen and the Art of Programming
http://math-blog.com - Mathematics is wonderful!
http://stacktrace.it - Aperiodico di resistenza informatica
Currently writing “Ruby on Rails for Microsoft Developers” for Wrox.


#3

Ciao,
puoi sempre piazzare un bella istruzione ‘debugger’ e lanciare il
server con -u.
oppure un bel ‘raise @user.errors.inspect’ subito dopo il save per un
controllo più veloce.
La perfezione sarebbe scrivere un test.

A giudicare da questa riga:
SELECT “email” FROM “users” WHERE (“users”.email =
'removed_email_address@domain.invalid
’ AND “users”.id <> 4
una validazione viene seguita, sembra la
‘validates_uniqueness_of :email’.

Il giorno 09/nov/08, alle ore 19:39, Marco C. ha scritto:


#4

Grazie mille per i consigli! Sono stati utilissimi.

Ora ho individuato l’errore (che si trova nella validazione della
password) e tento di risolverlo.