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
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
I metodi _tag sono per le forme non di modello. I non-tag sono. – wesgarrison
@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 :( –