【问题标题】:Globally permit a strong param全局允许强参数
【发布时间】:2019-02-19 17:37:33
【问题描述】:

有没有办法允许所有操作的参数?我正在开发的应用程序有一个功能标志系统,我希望可以通过查询字符串参数覆盖功能标志(以帮助测试)。我在application_controller 中添加了如下内容:

before_action :apply_feature_flag_overrides

def apply_feature_flag_overrides
  overrides = params.permit![:feature_flags]
  current_user.feature_flag_overrides = overrides
end

这对于不使用参数的操作来说很好,但是当一个操作发生时我会收到如下错误:

ActionController::UnpermittedParameters at /upcoming_posts
found unpermitted parameter: :feature_flags

似乎params.permitparams.require 对于任何给定的操作只会被调用一次。那是对的吗?有没有办法为这样的横切关注点全局白名单一组参数?我可以更新对params 的每次调用以包括:feature_flags,但这会容易出错且重复。

【问题讨论】:

  • 您可能希望在使用后将其从params 中删除。这样就不会干扰其他检查。
  • 不错!这最终奏效了。我稍微调整了我的代码以使用params.to_unsafe_h[:feature_flags] 来获取标志,然后根据您的建议,我使用:params.reject! { |key| key == "feature_flags" } 清理它们。你想发帖作为答案,以便我给你信用吗?
  • 我想你已经弄清楚了细节,所以值得在这里添加一个自我回答。

标签: ruby-on-rails strong-parameters


【解决方案1】:

感谢@tadman 关于删除使用过的参数的评论,我得到了这个工作。更新后的代码如下:

before_action :apply_feature_flag_overrides

def apply_feature_flag_overrides
  overrides = params.to_unsafe_h[:feature_flags]
  current_user.feature_flag_overrides = overrides
  params.reject! { |key| key == "feature_flags" }
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多