【发布时间】:2010-10-09 20:28:08
【问题描述】:
如何使复选框在最初显示时默认为“选中”?
我还没有找到一种“Rails”方法来做到这一点(有效),所以我用 JavaScript 做到了。在 Rails 中是否有正确的方法来做到这一点?我正在使用 Rails 1.2.3。
【问题讨论】:
标签: ruby-on-rails ruby
如何使复选框在最初显示时默认为“选中”?
我还没有找到一种“Rails”方法来做到这一点(有效),所以我用 JavaScript 做到了。在 Rails 中是否有正确的方法来做到这一点?我正在使用 Rails 1.2.3。
【问题讨论】:
标签: ruby-on-rails ruby
简单
<%= f.check_box :subscribe, checked: "checked" %>
【讨论】:
我很震惊,没有一个答案能 100% 解决问题。
由于所有建议的解决方案都会在编辑表单上给出checked 结果,即使用户未选中该复选框。
<%= f.check_box :subscribe, checked: @event.new_record? || f.object.subscribe? %>
适用于 rails 4 +,未在下面测试。
【讨论】:
如果您在表单上下文中使用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
【讨论】:
我就是这样做的。
在 check_box_tag 上方添加值为 0 的隐藏字段
<%= hidden_field_tag :subscribe, '0' %>
<%= check_box_tag :subscribe, '1', params[:subscribe] != '0' %>
在服务器上检查!= '0'
subscribe = params[:subscribe] != '0'
【讨论】:
Rails 3.x
= form_for(@user) do |f|
= f.check_box :subscribe, {checked: true, ...}
这会将检查状态设置为 true,并且应该可以正常工作。注意 ruby 1.9.x 的哈希语法,对于 ruby 1.8.x 使用哈希标签格式 {:checked => true, ...}
【讨论】:
{}。所以你可以编码f.check_box :subscribe, checked: true
在控制器的新操作中,尝试:
@user = User.new(:male => true)
其中 :male 是您要在 /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
在表单中:复选框在创建时被选中(通过调用 new),但如果验证失败,则复选框保持设置为用户发布的值。
# in the view
<%= form_for ..... |f| %>
...
<%= f.check_box :active %>
...
<% end %>
另一种方法,但不是很好(如果您想更改必须进行新迁移的逻辑)是设置 :default => 1 in给定模型和属性的迁移。
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
【讨论】: