Module: Para::FormBuilder::NestedForm

Defined in:
lib/para/form_builder/nested_form.rb

Instance Method Summary collapse

Instance Method Details

#allow_destroy?Boolean

Returns:

  • (Boolean)


49
50
51
52
53
54
55
# File 'lib/para/form_builder/nested_form.rb', line 49

def allow_destroy?
  return false unless nested?

  nested_options = parent_object.nested_attributes_options
  relation = nested_options[nested_attribute_name]
  relation && relation[:allow_destroy]
end

#inverse_of?(field_name) ⇒ Boolean

Returns:

  • (Boolean)


57
58
59
60
61
62
# File 'lib/para/form_builder/nested_form.rb', line 57

def inverse_of?(field_name)
  return false unless nested?

  reflection = parent_object.class.reflect_on_association(nested_attribute_name)
  reflection && (reflection.options[:inverse_of].to_s == field_name.to_s)
end

#nested?Boolean

Returns:

  • (Boolean)


64
65
66
# File 'lib/para/form_builder/nested_form.rb', line 64

def nested?
  nested_attribute_name.present? && options[:parent_builder]
end

#nested_attribute_nameObject



68
69
70
71
72
73
# File 'lib/para/form_builder/nested_form.rb', line 68

def nested_attribute_name
  options[:nested_attribute_name] ||=
    if (match = object_name.match(/\[(\w+)_attributes\]/))
      match[1]
    end
end

#nested_fieldsObject

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_nameObject

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.



83
84
85
# File 'lib/para/form_builder/nested_form.rb', line 83

def nested_fields_partial_name
  :fields
end

#nested_resource_dom_idObject



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_nameObject



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(/(<\/p>|<br\s*\/?>)/, " ")

    template.sanitize(name, tags: [])
  end
end

#parent_objectObject



75
76
77
# File 'lib/para/form_builder/nested_form.rb', line 75

def parent_object
  nested? && options[:parent_builder].object
end

#remove_association_buttonObject



37
38
39
40
41
42
43
44
45
46
47
# File 'lib/para/form_builder/nested_form.rb', line 37

def remove_association_button
  return "" unless allow_destroy?

  template.(: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