Class: Interview::NestedForm

Inherits:
Control
  • Object
show all
Includes:
HasControls
Defined in:
lib/interview/nested_form.rb

Instance Attribute Summary collapse

Attributes included from HasControls

#controls

Attributes inherited from Control

#parent

Instance Method Summary collapse

Methods included from HasControls

#add_control, #add_controls, included, #initialize, #siblings

Methods inherited from Control

#ancestors, build, definition, #find_attribute, #find_attribute!, inherited, #initialize, #set_attributes, #set_defaults

Instance Attribute Details

#alignObject

todo: align einbauen



5
6
7
# File 'lib/interview/nested_form.rb', line 5

def align
  @align
end

#form_builderObject (readonly)

Returns the value of attribute form_builder.



6
7
8
# File 'lib/interview/nested_form.rb', line 6

def form_builder
  @form_builder
end

#objectObject (readonly)

Returns the value of attribute object.



6
7
8
# File 'lib/interview/nested_form.rb', line 6

def object
  @object
end

#polymorphicObject

todo: align einbauen



5
6
7
# File 'lib/interview/nested_form.rb', line 5

def polymorphic
  @polymorphic
end

Instance Method Details

#renderObject



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/interview/nested_form.rb', line 8

def render
  assoc_form_builder = find_attribute! :form_builder
  assoc_method = find_attribute! :assoc_method
  objects = find_attribute! :objects
  
  html = Builder::XmlMarkup.new
  html.div class: 'nested_forms' do
    html << assoc_form_builder.fields_for(assoc_method.to_sym, objects) do |form_builder|
      if @polymorphic
        render_polymorphic_nested_form(form_builder)
      else
        render_nested_form(form_builder)
      end
    end
  end
  return html.target!
end

#render_nested_form(form_builder) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/interview/nested_form.rb', line 26

def render_nested_form(form_builder)
  @form_builder = form_builder
  @object = form_builder.object
  html = Builder::XmlMarkup.new
  html.div class: 'nested_form collapse in' do
    @controls.each do |control|
      html << control.render
    end
    html << form_builder.hidden_field(:id)
    html << form_builder.hidden_field(:_destroy, class: 'nested_form_destroy')
  end
  html.target!.html_safe
end

#render_polymorphic_nested_form(form_builder) ⇒ Object



40
41
42
43
44
45
46
47
48
# File 'lib/interview/nested_form.rb', line 40

def render_polymorphic_nested_form(form_builder)
  object = form_builder.object
  if klass = "#{object.class.name}NestedForm".safe_constantize
    nested_form = klass.new(parent: self)
    return nested_form.render_nested_form(form_builder)
  else
    return self.render_nested_form(form_builder)
  end
end