2009-02-25 10 views

Respuesta

39

Si usa check_box en el contexto de un formulario, la casilla de verificación mostrará el valor que ese campo tenga.

@user = Person.find(:first) 
@user.active = true 
check_box 'user', 'active' #=> will be checked by default 

Si está utilizando , el tercer parámetro es el estado inicial (check_box_tag doc):

check_box_tag "active", 1, true 
+0

No estoy leyendo valor check_box/escritura a la base de datos, por lo que el cambio a check_box_tag y con el interruptor cierto resolvió el problema. ¡Gracias! – daustin777

+0

Los métodos _tag son para formularios que no son modelos. Los que no son _tag son. – wesgarrison

+0

@wesgarrison Estoy usando un check_box_tag como este <% = check_box_tag "benificiary_id [# {b.id}]", b.id,: name => "benificiary_id []"%> aquí cómo verifico si algún registro revisado o no durante la actualización? de forma predeterminada, mi acción de actualización toma todos los valores de casilla de verificación, incluso si algunos de ellos no están marcados :( –

6

En nueva acción del controlador, intente:

@user = User.new(:male => true) 

Dónde: hombre es el atributo que desea comprobar por defecto en las páginas /users/new. Esto pasará el atributo :male a la vista con un valor de true, lo que da como resultado un recuadro marcado.

0

Esto funciona en Rails 2.3.x y Rails 3.0.x!

En acción nueva en el controlador, la casilla de verificación está establecida en verdadero.

# in the controller 
def new 
    @user = Person.find(:first) 
    @user.active = true 
end 

En la forma: la casilla de verificación está marcada en la creación (por la llamada nueva), pero si falla la validación de la casilla de verificación permanece establecido con el valor que el usuario tiene puesto.

# in the view 
<%= form_for ..... |f| %> 
    ... 
    <%= f.check_box :active %> 
    ... 
<% end %> 

Otra manera, pero no tan bueno (si desea cambiar la lógica de lo que tiene que hacer una nueva migración) es establecer : default => 1 en la migración del modelo dado y atributo.

class CreatePeople < ActiveRecord::Migration 
    def self.up 
    create_table :people do |t| 
     ... 
     t.boolean :active,    :null => false, 
             :default => 1 
     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :people 
    end 
end 
36

rieles 3.x

= form_for(@user) do |f| 
    = f.check_box :subscribe, {checked: true, ...} 

Esto establece el estado de activación de verdadera y debería funcionar bien. Tenga en cuenta la sintaxis ruby ​​1.9.x del hash, para el uso de ruby ​​1.8.x hash tag {: checked => true, ...}

+1

Me pareció útil al extraer de un registro DB – ScottJShea

+0

este también funciona con Rails 2.3.11. Solo use la sintaxis de hash Ruby 1.8.7. – Paul

+0

También funciona en 4.2. –

0

Lo hice de esa manera.

Añadir campo oculto con un valor de 0 ARRIBA check_box_tag

<%= hidden_field_tag :subscribe, '0' %> 
<%= check_box_tag :subscribe, '1', params[:subscribe] != '0' %> 

En el registro del servidor con != '0'

subscribe = params[:subscribe] != '0' 
3

Me sorprendió que ninguna de las respuestas a resolver el 100% del problema.
Como todas las soluciones sugeridas dará resultado checked en el formulario de edición, incluso si el usuario desmarcó la casilla de verificación.

<%= f.check_box :subscribe, checked: @event.new_record? || f.object.subscribe? %>

Works para carriles 4 +, no ensayaron a continuación.

+0

Esto debe marcarse como la respuesta correcta. ¡Gracias! – AlphaNico

1

simple

<%= f.check_box :subscribe, checked: "checked" %> 
Cuestiones relacionadas