【问题标题】:Check for presence of some parameter in a set检查集合中是否存在某些参数
【发布时间】:2017-02-05 08:03:33
【问题描述】:

我的搜索引擎从参数中检索一些搜索过滤器,但如果没有“过滤器”参数,我需要做其他事情。

我之前在做

params.slice(*filter_params).any?

但我现在得到了一个

弃用警告:任何方法?已弃用并将在 Rails 5.1 中删除,因为 ActionController::Parameters 不再继承自哈希。使用这种已弃用的行为会暴露潜在的安全问题。如果您继续使用此方法,您可能会在您的应用程序中创建一个可被利用的安全漏洞。相反,请考虑使用以下未弃用的记录方法之一:http://api.rubyonrails.org/v5.0.0.rc1/classes/ActionController/Parameters.html

我不确定我能做些什么来替换这里的.any? 电话?

【问题讨论】:

  • 嘿,如果有任何答案解决了您的问题,请确保接受它。附言您是否尝试过我在回复this your earlier questions 的评论中建议的任何事情?我只是认为qualified_const_get 可能是您所需要的(尽管聚会有点晚了)

标签: ruby-on-rails ruby-on-rails-5


【解决方案1】:

你可以用Object#present?代替它:

params.slice(*filter_params).present?

【讨论】:

    【解决方案2】:

    您可以在params 上调用.to_h 以获取您习惯的哈希方法。

    【讨论】:

    • 对我来说这听起来像是一种解决方法而不是解决方案:)
    • 这仍然是一个可行的解决方案。 OP 的场景并没有通过使用 .any? 和丢失强参数的 @permitted 状态来引入安全风险,这就是为什么首先删除了从 Hash 的继承:github.com/rails/rails/pull/14384
    【解决方案3】:

    你可以使用 !.blank 吗?还是 !.empty?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      • 2011-10-11
      • 2022-11-23
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多