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

标签 ruby-on-rails strong-parameters

我已将以下内容添加到我的 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 upDevise::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/

    相关文章:

    ruby-on-rails - .find 或 where 事件记录查询中的条件

    ruby-on-rails - 使用 Rails 3 在 heroku 上使用 Gmail

    ruby-on-rails - 如何干净地更新 Rails 4 中的 HABTM 关联列表?

    ruby-on-rails - 如何使用 strong_parameters 允许除 user_id 之外的所有属性?

    ruby-on-rails - 在 Rails 4 中使用强参数值白名单

    ruby-on-rails - Rails 5.1 中的未知参数强参数问题

    ruby-on-rails - 如何设置 Controller 参数的默认值?

    sql - 排序查询结果太慢

    ruby-on-rails - 链接到 ruby​​ 中的表单

    ruby-on-rails - 解决 Rails 应用程序中的类名冲突