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!