require 'rexml/document' module BulmaFormRails # rdoc-image:https://github.com/modgeosys/bulma_form_rails/blob/371b651b4cf38336f85378467f15b98b5367049e/doc/images/modgeosys_logo.jpg?raw=true # # https://kevinweller.name # # This Ruby on Rails Helper module supports tabular editable multi-object subforms. module SubformHelpers # Renders a child objects collection management UI subform, including row addition and deletion buttons by default. # * +collection+ - an array of serializable objects # * +name+ - the lower-case singular name of the object for display purposes # * +attributes_key+ - a symbolic key into the attribute reference hash retrievable via the lookup_attributes(key) method defined on the controller as a +helper_method+, eg +:object+ for: # {object: ["attribute_1", "attribute_2"]} # * +add_child_path+ - the controller URL path for the action to add a child object to the collection # * +options+ - a hash of additional options to pass to the partials # * +system_controlled+ - +true+ if you want no row add or delete buttons, +false+ or unspecified if you do want add and delete buttons # * +total_columns+ - an array of integers representing column numbers requiring arithmetic totals at the bottom of the subform, eg: # [3, 4] # * +container+ - a string representing an array index expression for a row if not a single index, eg: # "[related_reservations][#{related_reservation_counter}]" # To use this helper method, you will first need to do the following: # 1. Call bulma_child_forms from the specific controller (but outside any existing method definitions) for your view, passing in a hash of the object collections to be managed along with their attributes, for example, {object1: %w[attr1 attr2], object2: %w[attr3 attr4]}. # 2. Add a route to the add_child action for the same controller, for example, put 'users/add_child', to: 'users#add_child'. def bulma_child_objects(collection, name, attributes_key, add_child_path, options = {}) render partial: 'bulma_form_rails/children', object: collection, locals: {url: add_child_path, name: name, attributes_key: attributes_key}.merge(options) end end end