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

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