如何使複選框在初始顯示時默認爲「已檢查」?如何使複選框默認爲在Rails 1.2.3中「檢查」?
我還沒有找到「Rails」的方式來做到這一點(工作),所以我用JavaScript做到了。有沒有一種適當的方式在Rails中做到這一點?我正在使用Rails 1.2.3。
如何使複選框在初始顯示時默認爲「已檢查」?如何使複選框默認爲在Rails 1.2.3中「檢查」?
我還沒有找到「Rails」的方式來做到這一點(工作),所以我用JavaScript做到了。有沒有一種適當的方式在Rails中做到這一點?我正在使用Rails 1.2.3。
如果您在表單的上下文中使用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
在你的控制器的新動作,嘗試:
@user = User.new(:male => true)
其中:男性是您希望在/users/new
頁面上默認檢查的屬性。這會將:male
屬性傳遞給值爲true
的視圖,從而生成一個複選框。
這適用於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
的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隱藏字段上方check_box_tag
<%= hidden_field_tag :subscribe, '0' %>
<%= check_box_tag :subscribe, '1', params[:subscribe] != '0' %>
在服務器檢查與!= '0'
subscribe = params[:subscribe] != '0'
我感到非常震驚,沒有一個答案解決問題的100%。
由於所有建議的解決方案都會在編輯表單上顯示checked
結果,即使用戶未選中複選框。
<%= f.check_box :subscribe, checked: @event.new_record? || f.object.subscribe? %>
Works的導軌4 +,不低於測試。
簡單
<%= f.check_box :subscribe, checked: "checked" %>
我不讀/寫check_box值的分貝,所以切換到check_box_tag和使用真正的開關解決了這個問題。謝謝! – daustin777 2009-02-25 17:52:25
_tag方法適用於非模型表單。非_tag的是。 – wesgarrison 2009-02-26 16:51:59
@wesgarrison我正在使用一個像這樣的check_box_tag <%= check_box_tag「benificiary_id [#{b.id}]」,b.id,:name =>「benificiary_id []」%>我該如何檢查是否有任何記錄在更新過程中是否檢查過?默認情況下,我的更新操作取得所有複選框值,即使其中一些未選中:( – 2011-11-06 08:35:19