【发布时间】:2014-06-24 20:21:10
【问题描述】:
在更新了我的新数据库的大约 15-20 个条目后,我意识到我的数据没有更新。我刚刚阅读了 Rails 4.0 中的强参数,结果发现我没有将它们列入白名单。我理解拥有它们的原因(尽管我完全不同意它创建的工作流程)。
基本上,我在创建应用程序时的工作流程是创建具有一些属性的脚手架模型。我通常需要更新(添加到)这个模型,因为我意识到需要新的属性。我使用以下迁移来做到这一点:
rails g migration AddThisNewAttributeToProduct this_new_attribute:string
但我今天了解到,这样做不会自动添加到强参数列表中,基本上如果我在表单中使用它,它不会保存到数据库中。最糟糕的是,我没有收到任何警告或任何东西!
因为我很可能会在以后添加参数时忘记更新强参数列表,所以我最终会一遍又一遍地这样做(即尝试使用表单更改数据而不将其保存到数据库中) .
所以,我很困惑如何解决这个问题:
有没有办法在使用迁移向模型添加属性时,自动将属性添加到强参数列表中?
有没有办法在开发模式下禁用强参数白名单?
可以在登录管理员时禁用它吗?
(重要)如果我尝试更改不在白名单中的属性,至少可以使应用程序崩溃吗?所以我被提醒添加它?几乎与 attr_accessible 过去的工作方式相同。
【问题讨论】:
-
当您从
form传递字段blah-blah并且没有在控制器中将其列入白名单时,您肯定会在日志中收到警告Unpermitted parameters: blah-blah。 -
这很奇怪,我认为在尝试创建具有未列入白名单的属性的批量分配记录时会出现
ActiveModel::ForbiddenAttributesError错误。编辑:实际上,那是你不允许任何我认为的时候,否则,正如 Kirti 所说,你会得到Unpermitted parameters: password例如。 -
如果你真的想要你可以使用
params.require(:product).permit!将整个参数哈希列入白名单,但你应该非常确定你想要这样做。我个人不建议这样做,并将其视为验收测试的一部分,以确保正确创建/更新表单上的新/修改数据。 -
格雷姆,这确实奏效了!在开发过程中这样做会很棒,然后我可以在生产中修复它。它会让事情变得容易得多。谢谢!
标签: ruby-on-rails strong-parameters