How can I make a check box default to being “checked” in Rails 1.2.3?

前端 未结 7 1101
攒了一身酷
攒了一身酷 2021-02-06 21:38

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

相关标签:
7条回答
  • 2021-02-06 22:06

    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
    
    0 讨论(0)
  • 2021-02-06 22:10

    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.

    0 讨论(0)
  • 2021-02-06 22:13

    Simple

    <%= f.check_box :subscribe, checked: "checked" %>
    
    0 讨论(0)
  • 2021-02-06 22:19

    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'
    
    0 讨论(0)
  • 2021-02-06 22:20

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

    0 讨论(0)
  • 2021-02-06 22:23

    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
    
    0 讨论(0)
提交回复
热议问题