我已将以下内容添加到我的 application.rb
中因为我想控制所有发送的参数:
config.action_controller.action_on_unpermitted_parameters = :raise
这样,如果我忘记允许一个参数或类似的东西,我在开发过程中会很快看到。
但是 - 现在尝试通过表单更新用户时出现以下错误:
found unpermitted parameters: utf8, _method, authenticity_token, commit, locale, id
我有点不确定如何继续:确实这些是我以前不关心的参数,它们是由 Rails 自动发送的
form_for
,据我所知。我只想关心我的资源的参数,例如
user[name]
, user[email]
, 等等。有没有办法通常允许上面那些不允许的参数?还是我错过了一个重要的点?
更新
由于问题似乎无法重现,这里是具有特定提交的存储库:
https://github.com/jmuheim/base/commit/dbb62dd68a8a243d056457c9093a6cd8ea3e3836
只需启动服务器,加载页面,注册为用户(或使用
josh
和来自种子的密码 joshjosh
),然后转到用户 > 列出用户,然后编辑您的用户。然后你会得到错误。你也可以做
$ rake
并查看失败的规范。有趣的是错误是不是 注册时提出的,所以我想这与
UsersController
有关。 .可能是 inherited resources 的问题?
最佳答案
我刚刚使用了您的应用程序并设法重现了您的问题。如果我理解你的问题是正确的,我想说的是:
Sign up
由 Devise::RegistrationsController#create
处理.这就是它不会失败的原因。 Users -> Create user
时,它也会失败。 .从日志:Processing by UsersController#new as HTML
...
[1] base(#<UsersController>) » params
=> {
"controller" => "users",
"action" => "new",
"locale" => "en"
}
虽然它只是一个
#new
操作,因此无需检查允许的参数。我认为您应该在
inherited resources
中对此进行调查文档。 edit
的解决方案从 rails 发出权利 docs :params.require(:user).permit(
:name,
:email,
:avatar,
:avatar_cache,
:remove_avatar,
:about,
:password,
:password_confirmation,
:lock_version
)
3.1 但是
我发现这不适用于
inheried_resources
就像上面一样。尝试在文档 page 上搜索“如果您需要 params.require” .他们的建议之一是:def permitted_params
{
user: params.require(:user).permit(
:name,
:email,
:avatar,
:avatar_cache,
:remove_avatar,
:about,
:password,
:password_confirmation,
:lock_version
)
}
end
问候
关于ruby-on-rails - 如何为不允许的参数引发错误,但允许特定的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33020846/