Class: Compony::ModelFields::Anchormodel

Inherits:
Base
  • Object
show all
Defined in:
lib/compony/model_fields/anchormodel.rb

Instance Attribute Summary

Attributes inherited from Base

#extra_attrs, #model_class, #name, #schema_key

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#association?, #initialize, #label, #multi?, #schema_line, #transform_and_join

Constructor Details

This class inherits a constructor from Compony::ModelFields::Base

Class Method Details

.collect(flat_array, label_method: :label, key_method: :key) ⇒ Object

Takes an array of objects implementing the methods label and key and returns an array suitable for simple_form select fields.



5
6
7
# File 'lib/compony/model_fields/anchormodel.rb', line 5

def self.collect(flat_array, label_method: :label, key_method: :key)
  return flat_array.map { |entry| [entry.send(label_method), entry.send(key_method)] }
end

Instance Method Details

#simpleform_input(form, _component, **input_opts) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/compony/model_fields/anchormodel.rb', line 13

def simpleform_input(form, _component, **input_opts)
  selected_cst = form.object.send(@name)
  anchormodel_attribute = @model_class.anchormodel_attributes[@name]
  anchormodel_class = anchormodel_attribute.anchormodel_class
  opts = {
    collection:    self.class.collect(anchormodel_class.all),
    label_method:  :first,
    value_method:  :second,
    selected:      selected_cst&.key || anchormodel_class.all.first,
    include_blank: anchormodel_attribute.optional
  }.merge(input_opts)
  return form.input @name, **opts
end

#value_for(data, controller: nil, **_) ⇒ Object



9
10
11
# File 'lib/compony/model_fields/anchormodel.rb', line 9

def value_for(data, controller: nil, **_)
  return transform_and_join(data.send(@name), controller:) { |el| el&.label }
end