module Cocoon module ViewHelpers # this will show a link to remove the current association. This should be placed inside the partial. # either you give # - *name* : the text of the link # - *f* : the form this link should be placed in # - *html_options*: html options to be passed to link_to (see link_to) # # or you use the form without *name* with a *&block* # - *f* : the form this link should be placed in # - *html_options*: html options to be passed to link_to (see link_to) # - *&block*: the output of the block will be show in the link, see link_to def link_to_remove_association(*args, &block) if block_given? f = args.first html_options = args.second || {} name = capture(&block) link_to_remove_association(name, f, html_options) else name = args[0] f = args[1] html_options = args[2] || {} is_dynamic = f.object.new_record? html_options[:class] = [html_options[:class], "remove_fields #{is_dynamic ? 'dynamic' : 'existing'}"].compact.join(' ') hidden_field_tag("#{f.object_name}[_destroy]") + link_to(name, '#', html_options) end end # :nodoc: def render_association(association, f, new_object) f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder| render(association.to_s.singularize + "_fields", :f => builder, :dynamic => true) end end # shows a link that will allow to dynamically add a new associated object. # # - *name* : the text to show in the link # - *f* : the form this should come in (the formtastic form) # - *association* : the associated objects, e.g. :tasks, this should be the name of the has_many relation. # - *html_options*: html options to be passed to link_to (see link_to) # - *&block*: see link_to def link_to_add_association(*args, &block) if block_given? f = args[0] association = args[1] html_options = args[2] || {} link_to_add_association(capture(&block), f, association, html_options) else name = args[0] f = args[1] association = args[2] html_options = args[3] || {} html_options[:class] = [html_options[:class], "add_fields"].compact.join(' ') html_options[:'data-association'] = association.to_s.singularize html_options[:'data-associations'] = association.to_s.pluralize new_object = f.object.class.reflect_on_association(association).klass.new html_options[:'data-template'] = CGI.escapeHTML(render_association(association, f, new_object)) link_to(name, '#', html_options ) end end end end