我怎样才能使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'