2009-02-25 31 views

Trả lời

39

Nếu bạn đang sử dụng check_box trong ngữ cảnh của biểu mẫu, khi đó hộp kiểm sẽ hiển thị bất kỳ giá trị nào trường đó có.

@user = Person.find(:first) 
@user.active = true 
check_box 'user', 'active' #=> will be checked by default 

Nếu bạn đang sử dụng , tham số thứ ba là tình trạng ban đầu (check_box_tag doc):

check_box_tag "active", 1, true 
+0

Tôi không đọc/ghi giá trị check_box vào db, vì vậy chuyển sang check_box_tag và sử dụng công tắc đúng giải quyết vấn đề. Cảm ơn! – daustin777

+0

Các phương pháp _tag dành cho các biểu mẫu không phải là mô hình. Các thẻ không phải là _tag. – wesgarrison

+0

@wesgarrison Tôi đang sử dụng một check_box_tag như thế này <% = check_box_tag "benificiary_id [# {b.id}]", b.id,: name => "benificiary_id []"%> ở đây làm cách nào để kiểm tra xem có bản ghi nào không đã kiểm tra hay không trong khi cập nhật? theo mặc định, hành động cập nhật của tôi lấy tất cả các giá trị hộp kiểm ngay cả khi một số không được chọn: ( –

6

Trong hành động mới của điều khiển của bạn, hãy thử:

@user = User.new(:male => true) 

Trong đó: nam là thuộc tính bạn muốn được chọn theo mặc định trên /users/new trang. Điều này sẽ chuyển thuộc tính :male cho chế độ xem có giá trị là true, dẫn đến hộp kiểm.

0

Tính năng này hoạt động trên Rails 2.3.x và Rails 3.0.x!

Trên hành động mới trong bộ điều khiển, hộp kiểm được đặt thành true.

# in the controller 
def new 
    @user = Person.find(:first) 
    @user.active = true 
end 

Trong biểu mẫu: hộp kiểm được chọn với giá trị mà người dùng đã đăng.

# in the view 
<%= form_for ..... |f| %> 
    ... 
    <%= f.check_box :active %> 
    ... 
<% end %> 

Một cách khác, nhưng không quá tốt (nếu bạn muốn thay đổi logic bạn phải thực hiện một di cư mới) là để thiết lập : default => 1 trong sự di cư của mô hình đã cho và thuộc tính.

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 
36

Rails 3.x

= form_for(@user) do |f| 
    = f.check_box :subscribe, {checked: true, ...} 

này thiết lập trạng thái kiểm tra để đúng và nên làm việc tốt. Lưu ý cú pháp ruby ​​1.9.x của băm, cho ruby ​​1.8.x sử dụng định dạng thẻ băm {: checked => true, ...}

+1

Tôi thấy điều này hữu ích khi kéo từ bản ghi DB – ScottJShea

+0

cũng làm việc với Rails 2.3.11.Chỉ cần sử dụng cú pháp băm Ruby 1.8.7 – Paul

+0

Hoạt động trong 4.2 cũng như –

0

Tôi đã làm theo cách đó.

Thêm lĩnh vực ẩn với giá trị 0 TRÊN check_box_tag

<%= hidden_field_tag :subscribe, '0' %> 
<%= check_box_tag :subscribe, '1', params[:subscribe] != '0' %> 

On kiểm tra máy chủ với != '0'

subscribe = params[:subscribe] != '0' 
3

Tôi đã bị sốc rằng không ai trong số các câu trả lời giải quyết 100% của vấn đề.
Vì tất cả các giải pháp được đề xuất sẽ cung cấp cho kết quả checked trên biểu mẫu chỉnh sửa, ngay cả khi người dùng bỏ chọn hộp kiểm.

<%= f.check_box :subscribe, checked: @event.new_record? || f.object.subscribe? %>

Làm việc cho ray 4 +, không được thử nghiệm dưới đây.

+0

Điều này sẽ được đánh dấu là câu trả lời đúng. – AlphaNico

1

Simple

<%= f.check_box :subscribe, checked: "checked" %> 
Các vấn đề liên quan