Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

check if the value of a field changed in a before_update filter

I have a database field where I want to store my password. In a before_create filter in my model I call a encryption function and save from clear text to encrypted text.

I want now to use the before_update also for encryption, but only if the value has changed. How can I write a condition for checking if a field value has changed?

like image 991
xaver23 Avatar asked Feb 20 '10 10:02

xaver23


2 Answers

If the field is called name then

object.name_changed?

will return true.

like image 50
Farrel Avatar answered Nov 15 '22 06:11

Farrel


Since you usually do not store the password in the model using a field which you would expose to the form, it should be sufficient to only update it unless password.blank? and have the real password in a field "hashed_password" which you won't expose to the form.

Thanks to Ben (see below) for pointing out to additionally protect your encrypted password with attr_protected so it cannot be directly accessed/updated from the form. +1

like image 38
hurikhan77 Avatar answered Nov 15 '22 07:11

hurikhan77