Method: Fera::Base#save

Defined in:
lib/fera/models/base.rb

#save(extra_params = {}, raise: false) ⇒ Object



233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
# File 'lib/fera/models/base.rb', line 233

def save(extra_params = {}, raise: false)
  run_callbacks :save do
    if new?
      create(extra_params, raise: raise) # We'll raise the error below
    else
      # find changes
      changed_attributes = attributes.filter { |key, value| !@clean_copy.attributes.key?(key) || (@clean_copy.attributes[key] != value) || (key == self.class.primary_key) }
      changed_attributes.reject! { |k| k == 'id' }
      return false unless changed_attributes.keys.any?

      # save
      update(changed_attributes, extra_params, raise: raise)
    end

    @clean_copy = clone_with_nil # Clear changes

    self
  end
end