daustin777
daustin777

Reputation: 12748

How can I make a check box default to being "checked" in 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.

Upvotes: 43

Views: 63292

Answers (7)

rebbailey
rebbailey

Reputation: 754

Simple

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

Upvotes: 7

GEkk
GEkk

Reputation: 1366

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.

Upvotes: 6

wesgarrison
wesgarrison

Reputation: 7105

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

Upvotes: 46

Sergey Makridenkov
Sergey Makridenkov

Reputation: 624

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'

Upvotes: 0

Matt Smith
Matt Smith

Reputation: 3529

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, ...}

Upvotes: 51

dwhalen
dwhalen

Reputation: 1925

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.

Upvotes: 6

phlegx
phlegx

Reputation: 2742

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

Upvotes: 0

Related Questions