module ScaffoldingExtensions::MetaActiveRecord

  1. lib/scaffolding_extensions/model/active_record.rb

Class methods added to ActiveRecord::Base to allow it to work with Scaffolding Extensions.

Constants

SCAFFOLD_OPTIONS = ::ScaffoldingExtensions::MetaModel::SCAFFOLD_OPTIONS  

Public Instance methods

scaffold_add_associated_object (association, object, associated_object)

Add the associated object to the object's association

[show source]
# File lib/scaffolding_extensions/model/active_record.rb, line 21
def scaffold_add_associated_object(association, object, associated_object)
  association_proxy = object.send(association)
  association_proxy << associated_object unless association_proxy.include?(associated_object)
end
scaffold_all_associations ()

Array of all association reflections for this model

[show source]
# File lib/scaffolding_extensions/model/active_record.rb, line 27
def scaffold_all_associations
  reflect_on_all_associations
end
scaffold_associated_class (association)

The class that this model is associated with via the association

[show source]
# File lib/scaffolding_extensions/model/active_record.rb, line 32
def scaffold_associated_class(association)
  scaffold_association(association).klass
end
scaffold_association (association)

The association reflection for this association

[show source]
# File lib/scaffolding_extensions/model/active_record.rb, line 37
def scaffold_association(association)
  reflect_on_association(association)
end
scaffold_association_type (association)

The type of association, either :new for :has_many (as you can create new objects associated with the current object), :edit for :has_and_belongs_to_many (since you can edit the list of associated objects), or :one for other associations. I'm not sure that :has_one is supported, as I don't use it.

[show source]
# File lib/scaffolding_extensions/model/active_record.rb, line 45
def scaffold_association_type(association)
  case reflect_on_association(association).macro
    when :has_many
      :new
    when :has_and_belongs_to_many
      :edit
    else
      :one
  end
end
scaffold_associations ()

List of symbols for associations to display on the scaffolded edit page. Defaults to all associations that aren't :through or :polymorphic. Can be set with an instance variable.

[show source]
# File lib/scaffolding_extensions/model/active_record.rb, line 58
def scaffold_associations
  @scaffold_associations ||= scaffold_all_associations.reject{|r| r.options.include?(:through) || r.options.include?(:polymorphic)}.collect{|r| r.name}.sort_by{|name| name.to_s}
end
scaffold_destroy (object)

Destroys the object

[show source]
# File lib/scaffolding_extensions/model/active_record.rb, line 63
def scaffold_destroy(object)
  object.destroy
end
scaffold_error_raised ()

The error to raise, should match other errors raised by the underlying library.

[show source]
# File lib/scaffolding_extensions/model/active_record.rb, line 68
def scaffold_error_raised
  ::ActiveRecord::RecordNotFound
end
scaffold_fields (action = :default)

Returns the list of fields to display on the scaffolded forms. Defaults to displaying all columns with the exception of primary key column, timestamp columns, count columns, and inheritance columns. Also includes belongs_to associations, replacing the foriegn keys with the association itself. Can be set with an instance variable.

[show source]
# File lib/scaffolding_extensions/model/active_record.rb, line 76
def scaffold_fields(action = :default)
  return @scaffold_fields if @scaffold_fields
  fields = columns.reject{|c| c.primary || c.name =~ /(\A(created|updated)_at|_count)\z/ || c.name == inheritance_column}.collect{|c| c.name}
  scaffold_all_associations.each do |reflection|
    next if reflection.macro != :belongs_to || reflection.options.include?(:polymorphic)
    fields.delete(reflection.foreign_key)
    fields.push(reflection.name.to_s)
  end
  @scaffold_fields = fields.sort.collect{|f| f.to_sym}
end
scaffold_foreign_key (reflection)

The foreign key for the given reflection

[show source]
# File lib/scaffolding_extensions/model/active_record.rb, line 88
def scaffold_foreign_key(reflection)
  reflection.foreign_key
end
scaffold_get_object (id)

Retrieve a single model object given an id

[show source]
# File lib/scaffolding_extensions/model/active_record.rb, line 93
def scaffold_get_object(id)
  find(id.to_i)
end
scaffold_get_objects (options)

Retrieve multiple objects given a hash of options

[show source]
# File lib/scaffolding_extensions/model/active_record.rb, line 98
def scaffold_get_objects(options)
  records = self
  if options[:include]
    records = records.includes(*options[:include])
    records = records.references(*options[:include]) if scaffold_use_references
  end
  records = records.order(*options[:order]) if options[:order]
  records = records.limit(options[:limit]) if options[:limit]
  records = records.offset(options[:offset]) if options[:offset]
  conditions = options[:conditions]
  if conditions && Array === conditions && conditions.length > 0
    if String === conditions[0]
      records = records.where(*conditions)
    else
      conditions.each do |cond|
        next if cond.nil?
        records = case cond
          when Hash, String then records.where(cond)
          when Array then records.where(*cond)
          when Proc then records.where(&cond)
        end
      end
    end
  end
  records.to_a
end
scaffold_habtm_reflection_options (association)

Return the class, left foreign key, right foreign key, and join table for this habtm association

[show source]
# File lib/scaffolding_extensions/model/active_record.rb, line 126
def scaffold_habtm_reflection_options(association)
  reflection = reflect_on_association(association)
  [reflection.klass, reflection.foreign_key, reflection.association_foreign_key, reflection.options[:join_table]]
end
scaffold_new_associated_object_values (association, record)

Returns a hash of values to be used as url parameters on the link to create a new :has_many associated object. Defaults to setting the foreign key field to the record's primary key, and the STI type to this model's name, if :as is one of the association's reflection's options.

[show source]
# File lib/scaffolding_extensions/model/active_record.rb, line 135
def scaffold_new_associated_object_values(association, record)
  reflection = reflect_on_association(association)
  vals = {reflection.foreign_key=>record.id}
  vals["#{reflection.options[:as]}_type"] = name if reflection.options.include?(:as)
  vals
end
scaffold_primary_key ()

The primary key for the given table

[show source]
# File lib/scaffolding_extensions/model/active_record.rb, line 143
def scaffold_primary_key
  primary_key
end
scaffold_save (action, object)

Saves the object.

[show source]
# File lib/scaffolding_extensions/model/active_record.rb, line 148
def scaffold_save(action, object)
  object.save
end
scaffold_table_column_type (column)

The column type for the given table column, or nil if it isn't a table column

[show source]
# File lib/scaffolding_extensions/model/active_record.rb, line 153
def scaffold_table_column_type(column)
  column = column.to_s
  column = columns_hash[column]
  column.type if column
end
scaffold_table_name ()

The name of the underlying table

[show source]
# File lib/scaffolding_extensions/model/active_record.rb, line 160
def scaffold_table_name
  table_name
end
scaffold_use_references ()

Whether to use references in addition to includes for eager loading. This is necessary if you need to reference associated tables when filtering. Can be set with an instance variable.

[show source]
# File lib/scaffolding_extensions/model/active_record.rb, line 167
def scaffold_use_references
  @scaffold_use_references ||= false
end