2009-02-25 41 views

回答

39

如果您在表單的上下文中使用check_box,那麼該複選框將顯示該字段具有的任何值。

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

如果您使用,第三個參數是初始狀態(check_box_tag doc):

check_box_tag "active", 1, true 
+0

我不讀/寫check_box值的分貝,所以切換到check_box_tag和使用真正的開關解決了這個問題。謝謝! – daustin777 2009-02-25 17:52:25

+0

_tag方法適用於非模型表單。非_tag的是。 – wesgarrison 2009-02-26 16:51:59

+0

@wesgarrison我正在使用一個像這樣的check_box_tag <%= check_box_tag「benificiary_id [#{b.id}]」,b.id,:name =>「benificiary_id []」%>我該如何檢查是否有任何記錄在更新過程中是否檢查過?默認情況下,我的更新操作取得所有複選框值,即使其中一些未選中:( – 2011-11-06 08:35:19

6

在你的控制器的新動作,嘗試:

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

其中:男性是您希望在/users/new頁面上默認檢查的屬性。這會將:male屬性傳遞給值爲true的視圖,從而生成一個複選框。

0

這適用於Rails 2.3.x和Rails 3.0.x!

在控制器中的新動作中,該複選框設置爲true。

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

形式:該複選框在創建檢查(通過調用新的),但如果驗證失敗複選框保持設置有用戶有職位的價值。

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

的其他方式,但不是那麼好(如果你想改變的邏輯,你必須做出新的遷移)是設置:默認=> 1在給定的模型的遷移和屬性。

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

此設置的選中狀態,以真實,應該正常工作。注意ruby 1.9.x的散列語法,對於ruby 1.8.x使用散列標籤格式{:checked => true,...}

0

我是這樣做的。

值爲0隱藏字段上方check_box_tag

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

在服務器檢查與!= '0'

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

我感到非常震驚,沒有一個答案解決問題的100%。
由於所有建議的解決方案都會在編輯表單上顯示checked結果,即使用戶未選中複選框。

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

Works的導軌4 +,不低於測試。

1

簡單

<%= f.check_box :subscribe, checked: "checked" %> 
相關問題