全局允许强参数
Globally permit a strong param
有没有办法允许一个参数用于所有操作?我正在开发的应用程序有一个功能标志系统,我希望可以通过查询字符串参数覆盖功能标志(以帮助测试)。我在 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.permit
或 params.require
对于任何给定操作预计只会被调用一次。那是对的吗?有没有办法在全局范围内为这样的横切关注点列出一组参数?我可以更新对 params
的每次调用以也包括 :feature_flags
但这将是容易出错和重复的。
多亏了@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
有没有办法允许一个参数用于所有操作?我正在开发的应用程序有一个功能标志系统,我希望可以通过查询字符串参数覆盖功能标志(以帮助测试)。我在 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.permit
或 params.require
对于任何给定操作预计只会被调用一次。那是对的吗?有没有办法在全局范围内为这样的横切关注点列出一组参数?我可以更新对 params
的每次调用以也包括 :feature_flags
但这将是容易出错和重复的。
多亏了@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