【问题标题】:Rails 4 - Checkbox and Boolean FieldRails 4 - 复选框和布尔字段
【发布时间】:2020-06-18 17:52:21
【问题描述】:

我在网络上查看了大量关于此问题的不同文章(一些在此处),但有很多不同的建议,其中很多已经过时,所以我今天在这里提问......

我的用户表中有一个名为 admin 的字段?这是一个 :boolean 数据类型。我的视图中的表单中还有一个复选框,称为管理员? - 我希望能够在提交表单时在表记录中相应地创建 TRUE 和 FALSE。

我的部分视图代码是:

Admin User&#63; <%= f.check_box :admin? %>

我也已在我的 post_params 中允许这样做 - 这是必要的步骤吗?

params.require(:staff).permit(:name, :email, :password, :password_confirmation, :admin?)

当我提交表单时,管理员?场不受影响。任何建议将不胜感激。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    无需命名为“:admin?”

    只需在您的表单中使用它:

    Admin User&#63; <%= f.check_box :admin %>
    

    允许的参数如下:

    params.require(:staff).permit(:name, :email, :password, :password_confirmation, :admin)
    

    应该可以的。

    【讨论】:

    • 当我使用 f.checkbox :admin 时会报错,但当我使用 admin 时不会报错?
    • 表中的字段应该叫admin还是admin? (带问号) - 我在某处看到它推荐使用 ?在布尔字段中
    • 其实我收回了。更多的研究,我应该把它命名为 admin 没有? stackoverflow.com/questions/1524154/…
    【解决方案2】:

    适用于具有不属于对象的表单的任何人。

    我发现使用复选框语法如下:

    = check_box 'do_this', '', {}, 'true', 'false'
    

    然后在控制器端:

    ActiveRecord::ConnectionAdapters::Column.value_to_boolean(params[:do_this])
    

    会给你正确的布尔值do_this

    例子:

    [1] pry(main)> ActiveRecord::ConnectionAdapters::Column.value_to_boolean("true")
    => true
    [2] pry(main)> ActiveRecord::ConnectionAdapters::Column.value_to_boolean("false")
    => false
    [3] pry(main)> ActiveRecord::ConnectionAdapters::Column.value_to_boolean("1")
    => true
    [4] pry(main)> ActiveRecord::ConnectionAdapters::Column.value_to_boolean("0")
    => false
    

    编辑: 以上已弃用,请使用:

    ActiveRecord::Type::Boolean.new.type_cast_from_database(value)

    它给出的结果与上面的例子相同。

    Rails 5

    上述选项在 Rails 5 中不起作用。相反,请使用以下选项:

    ActiveRecord::Type::Boolean.new.cast(value)

    【讨论】:

    • value_to_boolean 方法已被弃用,使用 double bang 将任何值转换为布尔值,见stackoverflow.com/questions/16848052/…
    • double bang 将 0 转换为 true,因此它不会给您与 value_to_boolean 相同的答案。似乎ActiveRecord::Type::Boolean.new.type_cast_from_database(value) 是目前的做法。
    • @PressingOnAlways 是的,链接问题中的投票答案越高越好。
    • Rails 5: ActiveRecord::Type::Boolean.new.cast(string)
    【解决方案3】:

    您可能没有允许您的控制器通过参数接受管理字段。换句话说,强参数的问题。确保您的 model_params 中允许 :admin。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 2012-06-24
      • 2014-10-09
      • 1970-01-01
      相关资源
      最近更新 更多