Ruby on rails 我如何将复选框默认设置为“是”;勾选“;在Rails 1.2.3中?

Ruby on rails 我如何将复选框默认设置为“是”;勾选“;在Rails 1.2.3中?,ruby-on-rails,ruby,Ruby On Rails,Ruby,如何使复选框在最初显示时默认为“选中” 我还没有找到一种“Rails”的方法来实现这一点,所以我用JavaScript实现了这一点。在Rails中有没有合适的方法来实现这一点?我使用的是Rails 1.2.3。如果在表单上下文中使用了复选框,那么该复选框将显示该字段具有的任何值 @user = Person.find(:first) @user.active = true check_box 'user', 'active' #=> will be checked by default

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


我还没有找到一种“Rails”的方法来实现这一点,所以我用JavaScript实现了这一点。在Rails中有没有合适的方法来实现这一点?我使用的是Rails 1.2.3。

如果在表单上下文中使用了
复选框,那么该复选框将显示该字段具有的任何值

@user = Person.find(:first)
@user.active = true
check_box 'user', 'active'  #=> will be checked by default

如果使用的是
复选框标记
,则第三个参数是初始状态():


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

@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,但不太好(如果要更改逻辑,必须进行新迁移)

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
class CreatePeoplefalse,
:默认值=>1
t、 时间戳
结束
结束
def自动关闭
下桌:人
结束
结束

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

我就是这样做的

在复选框标记上方添加值为0的隐藏字段

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

我感到震惊的是,没有一个答案能100%解决问题。
因为所有建议的解决方案都将在编辑表单上给出
选中的结果
,即使用户取消选中复选框


适用于rails 4+,以下未测试。

简单

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


我没有将复选框值读取/写入db,因此切换到复选框标记并使用true开关解决了问题。谢谢标记方法用于非模型形式。非标记的是。@wesgarrison我正在使用一个复选框标记,如“benificiary\u id[]”%>这里我如何检查更新期间是否检查了任何记录?默认情况下,“我的更新”操作将使用所有复选框值,即使其中一些值未选中:(@shreekumar s:2年前的问题,你应该问一个新问题。我发现这在从DB记录中提取时很有用。这也适用于Rails 2.3.11。只需使用Ruby 1.8.7哈希语法。在4.2中也适用。我不知道它在3.x中也适用,但在4.2中你不需要
{}
。因此您可以只编写代码
f。复选框:订阅,选中:true
适用于rails 6.0。1这应该标记为正确答案。谢谢!
subscribe = params[:subscribe] != '0'
<%= f.check_box :subscribe, checked: "checked" %>