2012-02-07 6 views
24

¿Cómo puedo agregar una casilla de verificación con simple_form sin asociación con el modelo? Quiero crear una casilla de verificación que manejará algunos eventos de JavaScript, pero no lo sé? ¿Quizás extraño algo en la documentación? Want't de usar similar como el siguiente:¿Agregar casilla de verificación con simple_form sin asociación con el modelo?

= simple_form_for(resource, as: resource_name, url: session_url(resource_name), wrapper: :inline) do |f| 
    .inputs 
    = f.input :email, required: false, autofocus: true 
    = f.input :password, required: false 
    = f.input :remember_me, as: :boolean if devise_mapping.rememberable? 
    = my_checkbox, 'some text' 
+0

si esta casilla no tiene asociación con el modelo ¿por qué no utilizas standart checkbox helper? http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-check_box_tag –

+0

Soy perezoso al usar varios css) –

+0

No creo que puedas usar los ayudantes de simple_form sin campo de registro. No use clases generadas por simple_form para su casilla de verificación y no necesita agregar css personalizados. ¡Me doy cuenta de que eres de Sebastopol, ven a nuestra reunión local de Sebastopol.rb en este día de hoy! ¡Aclamaciones! –

Respuesta

34

se puede añadir un atributo personalizado para el modelo:

class Resource < ActiveRecord::Base 
    attr_accessor :custom_field 
end 

A continuación, utilice este campo como bloque:

= f.input :custom_field, :label => false do 
    = check_box_tag :some_name 

Intentar encuentre "Cómo envolver a los ayudantes de formulario de rieles" en su documentación https://github.com/plataformatec/simple_form

+0

Esto me ahorró un montón de problemas. Muchas gracias. –

+3

Esta es una respuesta útil, debe aceptarse en mi humilde opinión – hananamar

31

Puede usar

f.input :field_name, as: :boolean 
+0

Esta debería ser la respuesta aceptada –

+14

tenga en cuenta 'sin asociación con el modelo' si' field_name' no está definido en el modelo no funcionará – Muntasim

12

El comando propuesto por huoxito no funciona (al menos no en Rails 4). Por lo que he descubierto, el error se debe a que Rails intenta buscar el valor predeterminado para :custom_field, pero como este campo no existe, esta búsqueda falla y se lanza una excepción.

Sin embargo, funciona si especifica un valor predeterminado para el campo utilizando el parámetro :input_html, p. como este:

= f.input :custom_field, :as => :boolean, :input_html => { :checked => "checked" } 
2

Esta pregunta es primero en google sin la respuesta adecuada.

Desde Forma simple 3.1.0.rc1 hay una manera correcta de hacerlo se explica en el wiki: https://github.com/plataformatec/simple_form/wiki/Create-a-fake-input-that-does-NOT-read-attributes

app/inputs/fake_input.rb:

class FakeInput < SimpleForm::Inputs::StringInput 
    # This method only create a basic input without reading any value from object 
    def input(wrapper_options = nil) 
    merged_input_options = merge_wrapper_options(input_html_options, wrapper_options) 
    template.text_field_tag(attribute_name, nil, merged_input_options) 
    end 
end 

entonces usted puede hacer <%= f.input :thing, as: :fake %>

Para esta pregunta específica que tiene que cambiar la segunda línea del método a:

template.check_box_tag(attribute_name, nil, merged_input_options) 

Para las versiones admgc 3.1.0.rc1 antes dio una solución que está agregando el método que falta merge_wrapper_options:

https://stackoverflow.com/a/26331237/2055246

2

Añadir esto a app/inputs/arbitrary_boolean_input.rb:

class ArbitraryBooleanInput < SimpleForm::Inputs::BooleanInput 
    def input(wrapper_options = nil) 
    tag_name = "#{@builder.object_name}[#{attribute_name}]" 
    template.check_box_tag(tag_name, options['value'] || 1, options['checked'], options) 
    end 
end 

luego utilizarlo en sus puntos de vista como:

= simple_form_for(@some_object, remote: true, method: :put) do |f| 
    = f.simple_fields_for @some_object.some_nested_object do |nested_f| 
    = nested_f.input :some_param, as: :arbitrary_boolean 

i.e. La implementación anterior admite campos anidados correctamente. Otras soluciones que he visto no.

Nota: Este ejemplo es HAML.

Cuestiones relacionadas