Module: FiForm::BuilderExtensions::ActiveRecord

Included in:
FiForm::Builder
Defined in:
lib/fi_form/builder_extensions/active_record.rb

Instance Method Summary collapse

Instance Method Details

#fields_for(field, options = {}, &block) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/fi_form/builder_extensions/active_record.rb', line 4

def fields_for(field, options={}, &block)
  indent = options[:indent]
  indent = true if indent.nil?

  # build a new record for that association without adding it to the internal collection
  blue_print = capture_target(indent: indent) do
    association = @resource.public_send(field)
    record      = association.klass.new(association.scope_attributes).tap(&:readonly!)
    builder     = sub_builder(record, &block)
    instance_exec(builder, &block)

    add(:blue_print, items: builder.form.items)
  end

  add(:fields_for, options.merge(field: field, blue_print: blue_print)).add_children(indent: indent) do
    # capture fields for every existing record
    resource.public_send(field).each do |sub_resource|
      builder = sub_builder(sub_resource, &block)
      instance_exec(builder, &block)
      @target << builder.form
    end
  end
end