Class: ActionBlocks::ReferenceFieldBuilder

Inherits:
FieldBlock show all
Defined in:
lib/action_blocks/builders/model_builder.rb

Instance Attribute Summary collapse

Attributes inherited from FieldBlock

#field_type, #parent_model

Attributes inherited from BaseBuilder

#dsl_delegate, #id

Instance Method Summary collapse

Methods inherited from FieldBlock

#key

Methods inherited from BlockType

#is_block?, #type

Methods inherited from BaseBuilder

#after_build, #after_load, array_fields, block_type, builds, builds_many, delegate_class, #evaluate, #freeze, includes_scheme_helpers, #initialize, #is_block?, #key, references, sets, sets_many, #ui_reference, #valid?

Constructor Details

This class inherits a constructor from ActionBlocks::BaseBuilder

Instance Attribute Details

#association_nameObject

Returns the value of attribute association_name.



349
350
351
# File 'lib/action_blocks/builders/model_builder.rb', line 349

def association_name
  @association_name
end

Instance Method Details

#add_foreign_key_as_integer(parent) ⇒ Object



361
362
363
364
365
# File 'lib/action_blocks/builders/model_builder.rb', line 361

def add_foreign_key_as_integer(parent)
  if relation
    parent.dsl_delegate.integer(relation.join_foreign_key.to_sym)
  end
end

#before_build(parent, *args) ⇒ Object



353
354
355
356
357
358
359
# File 'lib/action_blocks/builders/model_builder.rb', line 353

def before_build(parent, *args)
  super(parent, *args)
  @association_name = args[0]
  @field_type = 'reference'
  @model_key = "model-#{args[1] || args[0]}"
  add_foreign_key_as_integer(parent)
end

#hashify(user) ⇒ Object



401
402
403
404
405
406
# File 'lib/action_blocks/builders/model_builder.rb', line 401

def hashify(user)
  {
    type: :reference,
    id: @id
  }
end

#match_requirements(select_as_prefix = nil) ⇒ Object



395
396
397
398
399
# File 'lib/action_blocks/builders/model_builder.rb', line 395

def match_requirements(select_as_prefix = nil)
    {
      path: [select_as_prefix, [association_name, relation.join_primary_key].join('_').to_sym].compact.flatten,
    }
end

#relationObject



369
370
371
372
373
# File 'lib/action_blocks/builders/model_builder.rb', line 369

def relation
  if @parent_model.active_model
    @parent_model.active_model.reflections[@association_name.to_s]
  end
end

#select_requirements(select_as_prefix = nil) ⇒ Object



387
388
389
390
391
392
393
# File 'lib/action_blocks/builders/model_builder.rb', line 387

def select_requirements(select_as_prefix = nil)
  target_data_reqs = model.name_field.select_requirements([select_as_prefix, association_name].compact.join('_'))
    {
      field_name: association_name,
      path: [association_name, target_data_reqs[:path]].flatten,
    }
end

#validate_association_nameObject



375
376
377
378
379
380
381
382
383
384
385
# File 'lib/action_blocks/builders/model_builder.rb', line 375

def validate_association_name
  # puts @parent_model.active_model.reflections.keys.inspect
  # puts @association_name.to_s
  unless relation
    errors.add(:association_name, "Association #{@association_name.to_s} is not a valid relationship for model #{@parent_model.active_model.to_s}.  Valid relations include: #{@parent_model.active_model.reflections.keys.inspect}")
  end

  unless relation && relation.belongs_to?
    errors.add(:association_name, "Association #{@association_name.to_s} is not a valid belongs_to relationship")
  end
end