Class: Compony::ModelFields::Anchormodel
- 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
-
.collect(flat_array, label_method: :label, key_method: :key) ⇒ Object
Takes an array of objects implementing the methods
label
andkey
and returns an array suitable for simple_form select fields.
Instance Method Summary collapse
- #simpleform_input_hidden(form, _component, name: nil, **input_opts) ⇒ Object
- #value_for(data, controller: nil, **_) ⇒ Object
Methods inherited from Base
#association?, #initialize, #label, #multi?, #schema_line, #simpleform_input, #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_hidden(form, _component, name: nil, **input_opts) ⇒ Object
13 14 15 16 17 18 19 20 21 22 |
# File 'lib/compony/model_fields/anchormodel.rb', line 13 def simpleform_input_hidden(form, _component, name: nil, **input_opts) if form.object selected_cst = form.object.send(@name) am_attr = form.object.class.anchormodel_attributes[@name] am_serializer = (am_attr.multiple? ? ::Anchormodel::ActiveModelTypeValueMulti : ::Anchormodel::ActiveModelTypeValueSingle).new(am_attr) input_opts[:input_html] ||= {} input_opts[:input_html][:value] = am_serializer.serialize(selected_cst) end return form.input name || @name, as: :hidden, **input_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 |