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 JavaScript. Is there a proper way to do this in Rails? I'm using Rails 1.2.3.
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 JavaScript. Is there a proper way to do this in Rails? I'm using Rails 1.2.3.
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
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, ...}
{}
. So you can just code f.check_box :subscribe, checked: true
–
Melly 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
Simple
<%= f.check_box :subscribe, checked: "checked" %>
In your controller's new action, try:
@user = User.new(:male => true)
Where :male is the attribute you want checked by default on the /users/new
pages. This will pass the :male
attribute to the view with a value of true
, resulting in a checked box.
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.
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 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'
© 2022 - 2024 — McMap. All rights reserved.