【问题标题】:How can I make a check box default to being "checked" in Rails 1.2.3?如何在 Rails 1.2.3 中使复选框默认为“选中”?
【发布时间】:2010-10-09 20:28:08
【问题描述】:

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

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

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    简单

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

    【讨论】:

      【解决方案2】:

      我很震惊,没有一个答案能 100% 解决问题。
      由于所有建议的解决方案都会在编辑表单上给出checked 结果,即使用户未选中该复选框。

      &lt;%= f.check_box :subscribe, checked: @event.new_record? || f.object.subscribe? %&gt;

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

      【讨论】:

      • 这应该被标记为正确答案。谢谢!
      【解决方案3】:

      如果您在表单上下文中使用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 值,因此切换到 check_box_tag 并使用 true 开关解决了问题。谢谢!
      • _tag 方法适用于非模型表单。非_tag 的是。
      • @wesgarrison 我在这里使用像这样的 check_box_tag "benificiary_id[]"%>如何检查更新期间是否检查了任何记录?默认情况下,即使其中一些未选中,我的更新操作也会采用所有复选框值:(
      • @shreekumar s:两年前的问题,你应该问一个新问题。
      【解决方案4】:

      我就是这样做的。

      在 check_box_tag 上方添加值为 0 的隐藏字段

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

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 我发现这在从数据库记录中提取时很有用
        • 这也适用于 Rails 2.3.11。只需使用 Ruby 1.8.7 哈希语法。
        • 也适用于 4.2。
        • 我不知道它也适用于 3.x,但在 4.2 中你不需要{}。所以你可以编码f.check_box :subscribe, checked: true
        • 适用于 rails 6.0.1
        【解决方案6】:

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

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

        其中 :male 是您要在 /users/new 页面上默认检查的属性。这会将:male 属性传递给值为true 的视图,从而生成一个复选框。

        【讨论】:

          【解决方案7】:

          这适用于 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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-02-11
            • 2020-06-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-03-21
            • 1970-01-01
            相关资源
            最近更新 更多