如何为不允许的参数引发错误,但允许特定的参数?

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. 也许是继承资源的问题?

Jos*_*eim 1

我终于找到了解决办法。

我发现了这个: 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)