ruby - Rails 3.2.13 vs Rails 4.0.1 - changed? method changed? -


i have noticed method changed? on activerecord objects has changed between rails 3.2.13 , rails 4.0.1. problem fields connected integer fields in database. let's assume have model model number integer field:

# rails 3.2.13  m = model.last m.number                #=> 5 m.number = '5hello' m.number                #=> 5 m.number_changed?       #=> true m.changed?              #=> true m.changes               #=> {:number => [5,5]}  # rails 4.0.1  m = model.last m.number                #=> 5 m.number = '5hello' m.number                #=> 5 m.number_changed?       #=> false m.changed?              #=> false m.changes               #=> {} 

this causes number of extremely annoying issues form validations - if user trying change integer value have invalid characters (but type cast result in same value initial one), rails not invoke save method , none of validation (including numericality: { only_integer: true }) run.

i have managed around problem overriding number_changed? method super || number.to_s != number_before_type_cast, extremely ugly.

the question is: why changed? bug or intentional change? how can fixed without overriding meta methods integer columns?

i'm not sure on how you're running validations, have model on rails app called extrafield , have following validation:

class extrafield < activerecord::base    # stuff    validates :display_order, numericality: { only_integer: true }    # more stuff  end 

i'm using rails 4.0.5 , can following:

e = extrafield.first e.display_order           #=> 1 e.valid?                  #=> true e.errors.messages         #=> {} e.display_order = '1banana' e.display_order           #=> 1 e.display_order_changed?  #=> false e.changed?                #=> false e.valid?                  #=> false e.errors.messages         #=> {:display_order=>["is not number"]} 

so, although record indeed isn't marked changed ( seems correct imho ), can still run validations , check model not valid. doesn't bug me, intentional improvement.

if form validating if model responding true changed? maybe should check controller code. or if use gem building form bug in gem guess.


Comments

Popular posts from this blog

apache - Remove .php and add trailing slash in url using htaccess not loading css -

javascript - jQuery show full size image on click -