如何在最初显示复选框时默认为“选中”?
我没有找到一种“Rails”方式来做到这一点(有效)所以我用JavaScript做到了。在Rails中有没有正确的方法呢?我正在使用Rails 1.2.3。
答案 0 :(得分:43)
Rails 3.x
= form_for(@user) do |f|
= f.check_box :subscribe, {checked: true, ...}
这会将checked状态设置为true,并且应该可以正常工作。注意哈希的ruby 1.9.x语法,对于ruby 1.8.x使用哈希标记格式{:checked =>是的,......}
答案 1 :(得分:42)
如果您在表单的上下文中使用check_box
,则复选框将显示该字段具有的任何值。
@user = Person.find(:first)
@user.active = true
check_box 'user', 'active' #=> will be checked by default
如果您使用的是check_box_tag
,则第三个参数是初始状态(check_box_tag
doc):
check_box_tag "active", 1, true
答案 2 :(得分:6)
在控制器的新操作中,尝试:
@user = User.new(:male => true)
其中:男性是您希望在/users/new
页面上默认选中的属性。这会将:male
属性传递给视图,其值为true
,从而生成一个复选框。
答案 3 :(得分:5)
<强>简单强>
<%= f.check_box :subscribe, checked: "checked" %>
答案 4 :(得分:3)
我感到震惊的是,没有一个答案可以解决100%的问题
由于所有建议的解决方案都会在编辑表单上显示checked
结果,即使用户取消选中该复选框也是如此。
<%= f.check_box :subscribe, checked: @event.new_record? || f.object.subscribe? %>
适用于导轨4 +,未在下面进行测试。
答案 5 :(得分:0)
这适用于Rails 2.3.x和Rails 3.0.x!
在控制器中的新操作上,复选框设置为true。
# in the controller
def new
@user = Person.find(:first)
@user.active = true
end
在表单中:创建时选中复选框(通过调用new)但如果验证失败,复选框将保持设置,其中包含用户发布的值。
# in the view
<%= form_for ..... |f| %>
...
<%= f.check_box :active %>
...
<% end %>
另一种方式,但不太好(如果您想要更改必须进行新迁移的逻辑)是设置:default =&gt; 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
答案 6 :(得分:0)
我是这样做的。
添加值为0的隐藏字段ABOVE check_box_tag
<%= hidden_field_tag :subscribe, '0' %>
<%= check_box_tag :subscribe, '1', params[:subscribe] != '0' %>
在服务器上检查!= '0'
subscribe = params[:subscribe] != '0'