developer in singapore,website designer singapore,mobile application developer singapore,app development singapore,ios app development singapore,android developer singapore,web development company singapore,developers in singapore,mobile app development singapore,singapore mobile application developer,design agency singapore,singapore website design,website developer singapore,mobile app developer singapore,website development singapore,web designer singapore,singapore web development,singapore web design services,ios developer singapore,web design singapore,design firms in singapore,web development singapore,graphic designer in singapore,web application singapore,mobile developer singapore,web design company singapore,web design services singapore,mobile apps singapore,singapore app developer,app developer singapore,ruby on rails developer singapore,mobile apps development singapore,mobile game developer singapore,website design singapore,mobile application development singapore,singapore web design,singapore mobile app developer

update_attribute vs. update_attributes

Object.update_attribute(:only_one_field, “Some Value”)
Object.update_attributes(:field1 => “value”, :field2 => “value2”, :field3 => “value3”)

Both of these will update an object without having to explicitly tell AR to update.
Rails API says:

for update_attribute

Updates a single attribute and saves the record without going through the normal validation procedure. This is especially useful for boolean flags on existing records. The regular update_attribute method in Base is replaced with this when the validations module is mixed in, which it is by default.

for update_attributes

Updates all the attributes from the passed-in Hash and saves the record. If the object is invalid, the saving will fail and false will be returned.

So if you don’t want to have the object validated you should use update_attribute.

But wait.. there are some more things to note: update_attribute not only bypass the validation but also bypass the before_* callbacks

Let check the source code:

# File vendor/rails/activerecord/lib/active_record/base.rb, line 2614
2614:       def update_attribute(name, value)
2615:         send(name.to_s + ‘=’, value)
2616:         save(false)
2617:       end

# File vendor/rails/activerecord/lib/active_record/base.rb, line 2621
2621:       def update_attributes(attributes)
2622:         self.attributes = attributes
2623:         save
2624:    end

the difference between two is update_attribute use save(false) where as update_attributes uses save or you can say save(true)

It’s rather long description but it is important to see that save(perform_validation = true)). If perform_validation is false it bypasses all the before_* callbacks associated with save. It doesn’t actually save the record. You can also save a record without triggering validations by using false

%d bloggers like this: