How can I make a check box default to being \"checked\" when it is initially displayed?
I\'ve not found a \"Rails\" way to do this (that works) so I did it with JavaScr
This works on Rails 2.3.x and Rails 3.0.x!
On action new in the controller, the check box is set to true.
# in the controller
def new
@user = Person.find(:first)
@user.active = true
end
In the form: the check box is checked on creation (by call new) but if the validation fails the check box remains set with the value that the user has post.
# in the view
<%= form_for ..... |f| %>
...
<%= f.check_box :active %>
...
<% end %>
An other way, but not so good (if you want to change the logic you have to make a new migration) is to set :default => 1 in the migration of the given model and attribute.
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
I was shocked that none of the answers solve 100% of the problem.
As all suggested solutions will give checked
result on edit form, even if the user unchecked the checkbox.
<%= f.check_box :subscribe, checked: @event.new_record? || f.object.subscribe? %>
Works for rails 4 +, not tested below.
Simple
<%= f.check_box :subscribe, checked: "checked" %>
I did it in that way.
Add hidden field with value 0 ABOVE check_box_tag
<%= hidden_field_tag :subscribe, '0' %>
<%= check_box_tag :subscribe, '1', params[:subscribe] != '0' %>
On server check with != '0'
subscribe = params[:subscribe] != '0'
Rails 3.x
= form_for(@user) do |f|
= f.check_box :subscribe, {checked: true, ...}
This sets the checked state to true and should work fine. Note the ruby 1.9.x syntax of the hash, for ruby 1.8.x use hash tag format {:checked => true, ...}
If you're using check_box
in the context of a form, then the check box will show whatever value that field has.
@user = Person.find(:first)
@user.active = true
check_box 'user', 'active' #=> will be checked by default
If you're using check_box_tag
, the third parameter is the initial state (check_box_tag doc):
check_box_tag "active", 1, true