simpleform simple_form simple rails form example bootstrap association ruby-on-rails wrapper simple-form

ruby on rails - rails - Rieles: envoltorio personalizado para enviar botón en simple_form?



simple_form select rails (3)

Estoy usando la gema simple_form con bootstrap 3. Quiero tener un contenedor para el botón de envío

Ahora muestra HTML como

<form id="new_order" ...> ... <input class="btn btn-primary" type="submit" value="Save" name="commit"> </form>

Quiero escribir una envoltura para que el HTML sea:

<form id="new_order" ...> ... <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <input class="btn btn-primary" type="submit" value="Save" name="commit"> </div> </div>

Tengo esto hasta ahora:

app / initializers / simple_form_bootstrap.rb:

options[:wrapper] = :horizontal_form options[:wrapper_mappings] = { check_boxes: :horizontal_radio_and_checkboxes, radio_buttons: :horizontal_radio_and_checkboxes, file: :horizontal_file_input, boolean: :horizontal_boolean, # what to write here?? # submit: :horizontal_submit_button }

y esta es mi envoltura:

config.wrappers :horizontal_submit_button, tag: ''div'', class: ''form-group'', error_class: ''has-error'' do |b| b.use :html5 b.use :placeholder b.wrapper tag: ''div'', class: ''col-sm-offset-2 col-sm-10'' do |ba| ba.use :input # some coe goes here, maybe end end

¿Qué tipo de entrada usar en wrapper_mappings para el botón de envío? ¿Cómo escribir esa envoltura?


Aparentemente, no es posible tener una envoltura para botones utilizando simple_form. Quería hacer lo mismo y la solución que encontré fue reemplazar

config.button_class = ''btn''

con

config.button_class = ''myclass1 myclass2''

en el archivo config/initializers/simple_form.rb . El problema es que será el predeterminado para todos los botones de formulario.


El button formulario simple es un envoltorio básico alrededor de los rieles que submit ayudante. Todo lo que hace es agregar button_class definido en un simple inicializador de formulario y enviarlo para que lo submit , así es como se ve ahora:

https://github.com/plataformatec/simple_form/blob/master/lib/simple_form/form_builder.rb#L211

def button(type, *args, &block) options = args.extract_options!.dup options[:class] = [SimpleForm.button_class, options[:class]].compact args << options if respond_to?(:"#{type}_button") send(:"#{type}_button", *args, &block) else send(type, *args, &block) end end

No hay lógica para usar la api de envoltura aquí. Pero esa declaración if permite definir su propio método de botón. Si usa f.button :submit en sus formularios, coloque esto en un inicializador (o decorador para que no tenga que reiniciar el servidor mientras lo personaliza):

module SimpleForm class FormBuilder def submit_button(*args, &block) ActionController::Base.helpers.content_tag(:div, class: ''form-actions'') do submit(*args, &block) end end end end

No tiene que usar helpers content_tag , cualquier cadena html_safe funcionará.


Estaba buscando hacer lo mismo hoy. No pude encontrar una manera de hacerlo a través de la API de envoltorio, de manera extraña, pero de manera predeterminada, a Simple Form le gusta envolver sus entradas en un div.form-inputs y su botón de envío en un div.form-actions . Así que div.form-actions para @extend .col-md-offset-4 para obtener el resultado que quería.

¡Espero que esto ayude!