Jos*_*eim 5 ruby-on-rails strong-parameters
我添加了以下内容,application.rb因为我想控制所有发送的参数:
config.action_controller.action_on_unpermitted_parameters = :raise
Run Code Online (Sandbox Code Playgroud)
这样,如果我忘记允许参数或类似的东西,我在开发过程中会很快看到。
但是 - 现在尝试通过表单更新用户时出现以下错误:
found unpermitted parameters: utf8, _method, authenticity_token, commit, locale, id
Run Code Online (Sandbox Code Playgroud)
我有点不确定如何继续:确实这些是我以前不关心的参数form_for,据我所知,它们是由 Rails' 自动发送的。
我只是想关心我的资源,例如参数user[name],user[email]等等。
有没有办法通常允许上面那些不允许的参数?还是我错过了一个重要的点?
更新
由于问题似乎无法重现,这里是具有特定提交的存储库:
https://github.com/jmuheim/base/commit/dbb62dd68a8a243d056457c9093a6cd8ea3e3836
只需启动服务器,加载页面,注册为用户(或使用来自种子的joshpw joshjosh),然后转到用户 > 列出用户,并编辑您的用户。然后你会得到错误。
您也可以只做$ rake并查看失败的规格。
有趣的是,注册时没有出现错误,所以我猜它与UsersController. 也许是继承资源的问题?
我终于找到了解决办法。
我发现了这个: https: //github.com/rafael/rails/commit/c197a7dc418cd4fe07131a41a44c8ddb66258801。
根据它,always_permitted_parameters可以设置如下配置:
# application.rb
config.action_controller.always_permitted_parameters = %w( controller action locale utf8 authenticity_token commit )
Run Code Online (Sandbox Code Playgroud)
我不知道为什么我必须手动设置它,而其他人似乎没有类似的问题。
哦,为了完整起见,以下是我通常处理参数的方式:
# application.rb
config.action_controller.always_permitted_parameters = %w( controller action locale utf8 authenticity_token commit )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
848 次 |
| 最近记录: |