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

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 Model.save false

Malcare WordPress Security