Module: Para::FormBuilder::NestedForm
- Defined in:
- lib/para/form_builder/nested_form.rb
Instance Method Summary collapse
- #allow_destroy? ⇒ Boolean
- #inverse_of?(field_name) ⇒ Boolean
- #nested? ⇒ Boolean
- #nested_attribute_name ⇒ Object
-
#nested_fields ⇒ Object
FIXME : When we have a nested field that maps to an STI model, the _id field is passed instead of the relation, and the inverse_of guard doesn’t work.
-
#nested_fields_partial_name ⇒ Object
Returns the partial name to be looked up for rendering used inside the nested fields partials, for the nested fields container and the remote nested fields partial.
- #nested_resource_dom_id ⇒ Object
- #nested_resource_name ⇒ Object
- #parent_object ⇒ Object
- #remove_association_button(allow_destroy_if:) ⇒ Object
Instance Method Details
#allow_destroy? ⇒ Boolean
50 51 52 53 54 55 56 |
# File 'lib/para/form_builder/nested_form.rb', line 50 def allow_destroy? return false unless nested? = parent_object. relation = [nested_attribute_name] relation && relation[:allow_destroy] end |
#inverse_of?(field_name) ⇒ Boolean
58 59 60 61 62 63 |
# File 'lib/para/form_builder/nested_form.rb', line 58 def inverse_of?(field_name) return false unless nested? reflection = parent_object.class.reflect_on_association(nested_attribute_name) reflection && (reflection.[:inverse_of].to_s == field_name.to_s) end |
#nested? ⇒ Boolean
65 66 67 |
# File 'lib/para/form_builder/nested_form.rb', line 65 def nested? nested_attribute_name.present? && [:parent_builder] end |
#nested_attribute_name ⇒ Object
69 70 71 72 73 74 |
# File 'lib/para/form_builder/nested_form.rb', line 69 def nested_attribute_name [:nested_attribute_name] ||= if (match = object_name.match(/\[(\w+)_attributes\]/)) match[1] end end |
#nested_fields ⇒ Object
FIXME : When we have a nested field that maps to an STI model, the _id
field is passed instead of the relation, and the inverse_of
guard doesn't work
8 9 10 11 12 |
# File 'lib/para/form_builder/nested_form.rb', line 8 def nested_fields @nested_fields ||= fields.reject do |field| inverse_of?(field.name) end end |
#nested_fields_partial_name ⇒ Object
Returns the partial name to be looked up for rendering used inside the nested fields partials, for the nested fields container and the remote nested fields partial.
84 85 86 |
# File 'lib/para/form_builder/nested_form.rb', line 84 def nested_fields_partial_name :fields end |
#nested_resource_dom_id ⇒ Object
27 28 29 30 31 32 33 34 35 |
# File 'lib/para/form_builder/nested_form.rb', line 27 def nested_resource_dom_id return '' unless nested? @nested_resource_dom_id ||= [ object.class.model_name.singular, (Time.now.to_f * 1000).to_i, object.id || "_new_#{nested_attribute_name}_id" ].join('-') end |
#nested_resource_name ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/para/form_builder/nested_form.rb', line 14 def nested_resource_name @nested_resource_name ||= begin name_method = Para.config.resource_name_methods.find do |method_name| object.respond_to?(method_name) && object.try(method_name).present? end name = (name_method && object.send(name_method)) || default_resource_name name = name.to_s.gsub(%r{(</p>|<br\s*/?>)}, ' ') template.sanitize(name, tags: []) end end |
#parent_object ⇒ Object
76 77 78 |
# File 'lib/para/form_builder/nested_form.rb', line 76 def parent_object nested? && [:parent_builder].object end |
#remove_association_button(allow_destroy_if:) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/para/form_builder/nested_form.rb', line 37 def (allow_destroy_if:) return '' unless allow_destroy? return '' unless !allow_destroy_if || allow_destroy_if.call(object) template.content_tag(:div, class: 'panel-btns') do template.link_to_remove_association( self, wrapper_class: 'form-fields', class: 'btn btn-danger btn-xs' ) do ::I18n.t('para.form.nested.remove') end end end |