class Para::Inputs::MultiSelectInput
Attributes
Public Instance Methods
Source
# File lib/para/inputs/multi_select_input.rb, line 57 def attribute_field @attribute_field ||= AttributeField::HasManyField.new( object.class, name: attribute_name ) end
Source
# File lib/para/inputs/multi_select_input.rb, line 70 def collection @collection ||= options.fetch(:collection) do model.all end end
Source
# File lib/para/inputs/multi_select_input.rb, line 53 def foreign_key :"#{ reflection.name.to_s.singularize }_ids" end
Source
# File lib/para/inputs/multi_select_input.rb, line 10 def input(wrapper_options = nil) input_html_options[:class] << "multi-select" # Load existing resources resources = input_html_options[:value] || object.send(attribute_name) # Order them if the list should be orderable resources = resources.sort_by(&method(:resource_position)) if orderable? template.render( partial: 'para/inputs/multi_select', locals: { form: @builder, model: model, attribute_name: foreign_key, orderable: orderable?, resources: resources, option_resources: option_resources, search_param: search_param, collection: collection } ) end
Source
# File lib/para/inputs/multi_select_input.rb, line 106 def join_resources @join_resources ||= orderable_association.load_target end
Source
# File lib/para/inputs/multi_select_input.rb, line 45 def model @model ||= reflection.klass end
Source
# File lib/para/inputs/multi_select_input.rb, line 33 def option_resources @option_resources ||= if model.orderable? collection.ordered else collection.sort_by { |resource| resource_name(resource) } end end
Source
# File lib/para/inputs/multi_select_input.rb, line 76 def orderable? @orderable ||= options.fetch(:orderable) do if attribute_field.through_reflection attribute_field.through_reflection.klass.orderable? else model.orderable? end end end
Source
# File lib/para/inputs/multi_select_input.rb, line 98 def orderable_association @orderable_association ||= if attribute_field.through_reflection object.association(attribute_field.through_reflection.name) else object.association(attribute_name) end end
Source
# File lib/para/inputs/multi_select_input.rb, line 41 def parent_model @parent_model ||= @builder.object.class end
Source
# File lib/para/inputs/multi_select_input.rb, line 49 def reflection @reflection ||= parent_model.reflect_on_association(attribute_name) end
Source
# File lib/para/inputs/multi_select_input.rb, line 86 def resource_position(resource) existing_resource = if attribute_field.through_reflection join_resources.find do |res| res.send(attribute_field.through_relation_source_foreign_key) == resource.id end else resource end existing_resource.position end
Source
# File lib/para/inputs/multi_select_input.rb, line 63 def search_param @search_param ||= options.fetch(:search_param) do attributes = model_field_mappings(model).fields fulltext_search_param_for(attributes) end end