class ActsAsTable::Mapper::HasMany

ActsAsTable mapper object for an instance of the {ActsAsTable::HasMany} class for the `:has_many` macro.

Public Class Methods

new(row_model, column_model_by_key, record_model, method_name, *targets, &block) click to toggle source

Returns a new ActsAsTable mapper object an instance of the {ActsAsTable::HasMany} class for the `:has_many` macro.

@param [ActsAsTable::RowModel] row_model @param [Hash<Symbol, ActsAsTable::ColumnModel>] column_model_by_key @param [ActsAsTable::RecordModel] record_model @param [#to_s] method_name @param [Array<ActsAsTable::Mapper::RecordModel>] targets @yieldparam [ActsAsTable::Mapper::HasMany] has_many @yieldreturn [void] @return [ActsAsTable::Mapper::HasMany]

Calls superclass method ActsAsTable::Mapper::Base::new
# File lib/acts_as_table/mapper.rb, line 147
def initialize(row_model, column_model_by_key, record_model, method_name, *targets, &block)
  @row_model, @column_model_by_key, @record_model = row_model, column_model_by_key, record_model

  @row_model.has_manies.build(macro: 'has_many', method_name: method_name) do |has_many|
    has_many.source_record_model = @record_model

    targets.each_with_index do |target, index|
      has_many.has_many_targets.build(position: index + 1) do |has_many_target|
        has_many_target.record_model = target.send(:instance_variable_get, :@record_model)
      end
    end
  end

  super(&block)
end