class ActiveRecord::Base

save and validation support for associations.

a simple (manual) unsaved? flag and method. at least it automatically reverts after a save!

the ever-useful #to_label method

Public Instance Methods

associated_valid?(path = []) click to toggle source
# File lib/active_scaffold/extensions/unsaved_associated.rb, line 3
def associated_valid?(path = [])
  return true if path.include?(self) # prevent recursion (if associated and parent are new records)
  path << self
  # using [].all? syntax to avoid a short-circuit
  with_unsaved_associated { |a| [a.valid?, a.associated_valid?(path)].all? {|v| v == true} }
end
no_errors_in_associated?() click to toggle source
# File lib/active_scaffold/extensions/unsaved_associated.rb, line 18
def no_errors_in_associated?
  with_unsaved_associated {|a| a.errors.count == 0 and a.no_errors_in_associated?}
end
save_associated() click to toggle source
# File lib/active_scaffold/extensions/unsaved_associated.rb, line 10
def save_associated
  with_unsaved_associated { |a| a.save and a.save_associated }
end
save_associated!() click to toggle source
# File lib/active_scaffold/extensions/unsaved_associated.rb, line 14
def save_associated!
  save_associated or raise(ActiveRecord::RecordNotSaved)
end
save_with_unsaved_flag(*args) click to toggle source

automatically unsets the unsaved flag

# File lib/active_scaffold/extensions/unsaved_record.rb, line 14
def save_with_unsaved_flag(*args)
  result = save_without_unsaved_flag(*args)
  self.unsaved = false
  return result
end
to_label() click to toggle source
# File lib/active_scaffold/extensions/to_label.rb, line 3
def to_label
  [:name, :label, :title, :to_s].each do |attribute|
    return send(attribute).to_s if respond_to?(attribute)
  end
end
unsaved=(val) click to toggle source

acts like a dirty? flag, manually thrown during update_record_from_params.

# File lib/active_scaffold/extensions/unsaved_record.rb, line 4
def unsaved=(val)
  @unsaved = (val) ? true : false
end
unsaved?() click to toggle source

whether the unsaved? flag has been thrown

# File lib/active_scaffold/extensions/unsaved_record.rb, line 9
def unsaved?
  @unsaved
end

Protected Instance Methods

associations_for_update() click to toggle source

Provide an override to allow the model to restrict which associations are considered by ActiveScaffolds update mechanism. This allows the model to restrict things like Acts-As-Versioned versions associations being traversed.

By defining the method :scaffold_update_nofollow returning an array of associations these associations will not be traversed. By defining the method :scaffold_update_follow returning an array of associations, only those associations will be traversed.

Otherwise the default behaviour of traversing all associations will be preserved.

# File lib/active_scaffold/extensions/unsaved_associated.rb, line 34
def associations_for_update
  if self.respond_to?( :scaffold_update_nofollow )
    self.class.reflect_on_all_associations.reject { |association| self.scaffold_update_nofollow.include?( association.name ) }
  elsif self.respond_to?( :scaffold_update_follow )
    self.class.reflect_on_all_associations.select { |association| self.scaffold_update_follow.include?( association.name ) }
  else
    self.class.reflect_on_all_associations
  end
end