2010-11-07 21 views

Respuesta

17

la mejor forma sería la de establecer el valor predeterminado en el modelo, algo así como

create_table :my_table do |t| 
    ... 
    t.boolean :my_boolean, :default => true 
    ... 
end 

cuales simple_form recogerá y establezca la casilla de verificación para ser revisado por defecto.

Una forma más simple es hacerlo como dice Dave, y simplemente forzar el valor a 1, pero si una validación falla, y muestra el formulario de nuevo, aún se comprobará, independientemente de cómo se veía cuando el formulario fué enviado.

+3

en realidad esto funciona pero implica algo más con un valor predeterminado en la base de datos. Creo que la mejor opción aquí es trabajar solo en el lado del cliente seleccionando el valor a través de: input_html => {: checked => true} – coorasse

+0

Esta es una mejor respuesta. – allesklar

2

esto debería funcionar:

= f.input :some_flag, :input_html => { :value => '1' } 
+1

-1, ya que podría estropear cualquier forma de base de datos para editar, por lo que este no es un buen consejo. –

+1

¿De verdad? Dude preguntó cómo configurarlo en la vista. ¿Dónde dijo que iba a editarlo alguna vez? –

+2

Hola Dave, en rieles la vista representa el html de la interfaz que se muestra en el navegador. Cuando Drew dice "si el tipo es booleano detrás de escena", eso parece implicar que esto va en contra de un modelo de registro activo y el uso de una casilla de verificación en contra de cualquier modelo de registro activo parece implicar que desea editar/actualizar ese atributo. Sin embargo, me abstendré de vencerte, ya que eso parece un poco mezquino. –

1

En mi opinión, el camino del carril de hacer esto sería para establecer el valor del atributo en el controlador:

@ some_object.some_flag = 1

+1

Creo que la mayoría de la gente diría que esta lógica pertenece al modelo. – steel

+0

Yo diría que depende. Los parámetros fuertes están definidos en el controlador. Por lo tanto, el valor de su bandera puede depender del contexto actual. ? – ndemoreau

89

Si no quieren, o no puede actualizar su migración a hacer 'la respuesta de PerfectlyNormal, a continuación, se puede añadir lo siguiente al final de su f.input:

:input_html => { :checked => true } 

Así, se convertiría en:

= f.input :some_flag, :input_html => { :checked => true } 

Espero que ayude!

+1

si el valor del formulario no existe en la base de datos, esta es la mejor solución ... –

+0

Esta debería ser la respuesta aceptada. – allesklar

+0

Esta es la respuesta correcta. – zx1986

7

funcionó para mí, que cheques sólo una casilla con valor de "Ninguno"

<%= f.input :notify, label: "Notification", as: :check_boxes, collection: ["None", "Daily", "Weekly", "Monthly", "Quarterly", "Yearly"], :item_wrapper_class => 'inline', :checked => ["None", true] %> 
2

acaba de tropecé con este post y lo que funcionó para mí es similar a la última respuesta - pero más cortos . Simplemente inicialice el objeto con la configuración deseada:

def new 
    Object.new(my_boolean: true) 
end 
Cuestiones relacionadas