我怎样才能使checkbox默认在Rails 1.2.3“检查”?

如何使checkbox在最初显示时默认为“已检查”?

我还没有find一个“Rails”的方式来做到这一点(工作),所以我用JavaScript做到了。 有没有一个适当的方法来在Rails中做到这一点? 我正在使用Rails 1.2.3。

如果您在check_box的上下文中使用check_box ,那么checkbox将显示该字段的任何值。

 @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 

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

在你的控制器的新动作中,尝试:

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

其中:male是您希望在/users/new页面上默认选中的属性。 这会将:male属性传递给值为true的视图,从而产生一个checkbox。

我很震惊没有答案解决100%的问题。
由于所有build议的解决scheme都会在编辑表单上显示checked结果,即使用户没有选中checkbox。

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

适用于导轨4 +,未在下面进行testing。

简单

 <%= f.check_box :subscribe, checked: "checked" %> 

这适用于Rails 2.3.x和Rails 3.0.x!

在控制器中的新动作中,checkbox设置为true。

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

在表单中:checkbox在创build时被检查(通过调用new),但如果validation失败,则checkbox将保持设置为用户具有的值。

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

另一种方式, 但不是很好 (如果你想改变逻辑,你必须做一个新的迁移)是在给定的模型和属性的迁移中设置:default => 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 

我是这样做的。

添加值为0的隐藏字段高于check_box_tag

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

在服务器上检查!= '0'

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