instance method update_columns

Ruby on Rails 6.0.6

Since v4.0.13

Available in: v4.0.13 v4.1.16 v4.2.9 v5.2.8.1 v6.0.6 v6.1.7.10 v7.0.10 v7.1.6 v7.2.3 v8.0.4 v8.1.2

Signature

update_columns(attributes)

Updates the attributes directly in the database issuing an UPDATE SQL statement and sets them in the receiver:

user.update_columns(last_request_at: Time.current)

This is the fastest way to update attributes because it goes straight to the database, but take into account that in consequence the regular update procedures are totally bypassed. In particular:

  • Validations are skipped.

  • Callbacks are skipped.

  • updated_at/updated_on are not updated.

  • However, attributes are serialized with the same rules as ActiveRecord::Relation#update_all

This method raises an ActiveRecord::ActiveRecordError when called on new objects, or when at least one of the attributes is marked as readonly.

Parameters

attributes req
Source
# File activerecord/lib/active_record/persistence.rb, line 663
    def update_columns(attributes)
      raise ActiveRecordError, "cannot update a new record" if new_record?
      raise ActiveRecordError, "cannot update a destroyed record" if destroyed?

      attributes = attributes.transform_keys do |key|
        name = key.to_s
        self.class.attribute_aliases[name] || name
      end

      attributes.each_key do |key|
        verify_readonly_attribute(key)
      end

      id_in_database = self.id_in_database
      attributes.each do |k, v|
        write_attribute_without_type_cast(k, v)
      end

      affected_rows = self.class._update_record(
        attributes,
        @primary_key => id_in_database
      )

      affected_rows == 1
    end

Defined in activerecord/lib/active_record/persistence.rb line 663 · View on GitHub · Improve this page · Find usages on GitHub

Defined in ActiveRecord::Persistence

Type at least 2 characters to search.

↑↓ navigate · open · esc close