module RailsStuff::Helpers::ResourceForm

Provides helper for SimpleForm.

Public Instance Methods

resource_form_for(namespace = nil, **options) click to toggle source

Generates `resource_form` helper to display form with basic arguments, elements, errors and options. Generated method can work without arguments in most of cases: it takes object from `resource` method.

Use `namespace` to add additional path parts to form action:

# this one will use [:site, resource]
resource_form_for :site

#### Options

  • `back_url` - default back url. Can be string with code, or hash for `url_for`.

  • `resource_method` - method to take resource from.

  • `method` - name of generated method.

# File lib/rails_stuff/helpers/resource_form.rb, line 21
      def resource_form_for(namespace = nil, **options)
        default_back_url =
          case options[:back_url]
          when Hash then "url_for(#{options[:back_url]})"
          when String then options[:back_url]
          else 'url_for(object)'
          end
        resource_method = options.fetch(:resource_method, :resource)
        method_name = options.fetch(:method, :resource_form)
        object_arg = (Array.wrap(namespace).map(&:inspect) + [resource_method]).join(', ')

        class_eval <<-RUBY, __FILE__, __LINE__ + 1
          def #{method_name}(object = [#{object_arg}], **options)
            back_url = options.delete(:back_url) || #{default_back_url}
            simple_form_for object, options do |f|
              html = ActiveSupport::SafeBuffer.new
              msg = f.object.errors[:base].first
              html << content_tag(:div, msg, class: 'alert alert-danger') if msg
              html << capture { yield(f) }
              html << content_tag(:div, class: 'form-group') do
                inputs = f.button(:submit, class: 'btn-primary')
                inputs << ' '
                inputs << link_to(translate_action(:cancel), back_url, class: :btn)
              end
            end
          end
        RUBY
      end