11

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

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

我的部分视图代码是:

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

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

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

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

4

3 回答 3

21

无需将其命名为“:admin?”

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

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

并且允许的参数是这样的:

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

那应该行得通。

于 2013-09-08T14:14:55.683 回答
7

对于具有不属于对象的形式的任何人。

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

= 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)

它给出了与上述示例相同的结果。

导轨 5

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

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

于 2015-09-29T16:30:30.743 回答
0

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

于 2016-07-14T00:00:36.540 回答