2009-02-25 12 views

risposta

39

Se si utilizza check_box nel contesto di un modulo, la casella di controllo mostrerà il valore di quel campo.

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

Se stai usando , il terzo parametro è lo stato iniziale (check_box_tag doc):

check_box_tag "active", 1, true 
+0

non sto leggendo/scrivendo il valore check_box al db, quindi il passaggio a check_box_tag e utilizzando il vero interruttore ha risolto il problema. Grazie! – daustin777

+0

I metodi _tag sono per le forme non di modello. I non-tag sono. – wesgarrison

+0

@wesgarrison Sto usando un check_box_tag come questo <% = check_box_tag "benificiary_id [# {b.id}]", b.id,: name => "benificiary_id []"%> qui come faccio a controllare se c'è qualche record controllato o no durante l'aggiornamento? per impostazione predefinita, la mia azione di aggiornamento prende tutti i valori della casella di controllo anche se alcuni di essi non sono spuntati :( –

6

In nuova azione del controller, provare:

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

Dove: maschio è l'attributo che si desidera verificare per impostazione predefinita nelle pagine /users/new. Questo passerà l'attributo :male alla vista con un valore di true, risultante in una casella selezionata.

0

Questo funziona su Rails 2.3.xe Rails 3.0.x!

Su azione nuova nel controller, la casella di controllo è impostata su true.

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

Nella forma: la casella di controllo è selezionata sulla creazione (dalla chiamata di nuovo), ma se la convalida non riesce la casella di controllo rimane impostato con il valore che l'utente ha posta.

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

Un altro modo, ma non così buono (se si desidera cambiare la logica si deve fare una nuova migrazione) è quello di impostare : default => 1 nella migrazione del modello di data e attributo.

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

Rails 3.x

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

Questa imposta lo stato controllato per vero e dovrebbe funzionare bene. Nota la sintassi ruby ​​1.9.x dell'hash, per ruby ​​1.8.x usa il formato del tag hash {: checked => true, ...}

+1

Ho trovato utile per estrarre da un record DB – ScottJShea

+0

funziona anche con Rails 2.3.11. Basta usare la sintassi dell'hash di Ruby 1.8.7 – Paul

+0

Funziona anche in 4.2 –

0

L'ho fatto in quel modo.

Aggiungi campo nascosto con il valore 0 SOPRA check_box_tag

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

Al momento del check server con != '0'

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

Sono rimasto scioccato che nessuna delle risposte a risolvere il 100% del problema.
Poiché tutte le soluzioni suggerite daranno il risultato checked al modulo di modifica, anche se l'utente ha deselezionato la casella di controllo.

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

Opere per rotaie 4 +, non testati sotto.

+0

Questo dovrebbe essere contrassegnato come la risposta corretta. – AlphaNico

1

semplice

<%= f.check_box :subscribe, checked: "checked" %> 
Problemi correlati