Rails: #update_attribute vs #update_attributes Rails: #update_attribute vs #update_attributes ruby-on-rails ruby-on-rails

Rails: #update_attribute vs #update_attributes


Please refer to update_attribute. On clicking show source you will get following code

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

and now refer update_attributes and look at its code you get

      # File vendor/rails/activerecord/lib/active_record/base.rb, line 26212621:       def update_attributes(attributes)2622:         self.attributes = attributes2623:         save2624:       end

the difference between two is update_attribute uses save(false) whereas update_attributes uses save or you can say save(true).

Sorry for the long description but what I want to say is important. save(perform_validation = true), if perform_validation is false it bypasses (skips will be the proper word) all the validations associated with save.

For second question

Also, what is the correct syntax to pass a hash to update_attributes... check out my example at the top.

Your example is correct.

Object.update_attributes(:field1 => "value", :field2 => "value2", :field3 => "value3")

or

Object.update_attributes :field1 => "value", :field2 => "value2", :field3 => "value3"

or if you get all fields data & name in a hash say params[:user] here use just

Object.update_attributes(params[:user])


Tip: update_attribute is being deprecated in Rails 4 via Commit a7f4b0a1. It removes update_attribute in favor of update_column.


update_attribute

This method update single attribute of object without invoking model based validation.

obj = Model.find_by_id(params[:id])obj.update_attribute :language, “java”

update_attributes

This method update multiple attribute of single object and also pass model based validation.

attributes = {:name => “BalaChandar”, :age => 23}obj = Model.find_by_id(params[:id])obj.update_attributes(attributes)

Hope this answer will clear out when to use what method of active record.