module FiForm::BuilderExtensions::ActiveRecord
Public Instance Methods
fields_for(field, options={}, &block)
click to toggle source
# 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
Private Instance Methods
resource_value(field)
click to toggle source
# File lib/fi_form/builder_extensions/active_record.rb, line 29 def resource_value(field) return unless @resource.respond_to?(field) @resource.public_send(field) end