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

#image_basedObject

todo: align einbauen



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

def image_based
  @image_based
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
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/interview/nested_form.rb', line 8

def render
  assoc_form_builder = find_attribute! :form_builder
  assoc_method = find_attribute! :assoc_method
  
  html = Builder::XmlMarkup.new
  html.div class: 'nested_form_container' do
    if @image_based
      html << Interview::NestedFormAddImages.new.render
    end
    html << assoc_form_builder.fields_for(assoc_method.to_sym) do |form_builder|
      if @polymorphic
        render_polymorphic_nested_form(form_builder)
      else
        render_nested_form(form_builder)
      end
    end
    html.script class: 'nested_form_script', type: 'text/x-tmpl' do
      new_object = assoc_form_builder.object.association(assoc_method.to_sym).build # todo: polymorphic add link
      html << assoc_form_builder.fields_for(assoc_method.to_sym, new_object, :child_index => "${index}") do |form_builder|
        if @polymorphic
          render_polymorphic_nested_form(form_builder)
        else
          render_nested_form(form_builder)
        end
      end
    end
  end
  return html.target!
end

#render_nested_form(form_builder) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/interview/nested_form.rb', line 38

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')
    if @image_based
      html << form_builder.hidden_field(:upload_buffer_id, class: 'upload_buffer_id')
    end
  end
  html.target!.html_safe
end

#render_polymorphic_nested_form(form_builder) ⇒ Object



55
56
57
58
59
60
61
62
63
# File 'lib/interview/nested_form.rb', line 55

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