如何在Rails 1.2.3中将复选框默认为“选中”?

时间:2009-02-25 15:55:01

标签: ruby-on-rails ruby

如何在最初显示复选框时默认为“选中”?

我没有找到一种“Rails”方式来做到这一点(有效)所以我用JavaScript做到了。在Rails中有没有正确的方法呢?我正在使用Rails 1.2.3。

7 个答案:

答案 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'