我正在尝试更新到Rails 5,我收到以下弃用警告:
弃用警告:哈希的方法已弃用,将在Rails 5.1中删除,因为ActionController::Parameters不再从哈希继承。使用这种不推荐的行为会暴露出潜在的安全问题。如果继续使用此方法,则可能会在应用程序中创建可被利用的安全漏洞。相反,请考虑使用以下未被弃用的有文档记录的方法之一:http://api.rubyonrails.org/v5.0.0/classes/ActionController/Parameters.html(从列标题调用,位于/Data/Projects/portal/trunk/app/helpers/application\u helper.rb:114)
警告所在的行如下所示:
link_to(name,
{
action: action_name,
params: params.merge({ order: key, page: nil })
},
{
title: "Sort by this field",
}) +
正如您所看到的,我不是在调用\u hash。也许Rails是。也许还有别的宝石。我无从得知,因为他们认为不值得提供堆栈跟踪。(专业提示-通常值得提供堆栈跟踪!)
因此,无论如何,我遵循了链接,计划找到一个替代方法,并且合并方法似乎没有被弃用,但可能他们只是忘记记录弃用状态,所以我不能确定。
那我该怎么做才能清除这个?
您可以调用。to_h
以获取安全哈希,根据Rails PR的评论。
现在有三种将参数转换为哈希的方法。
。permit
,假设不允许任何操作。”。permit
,请假定一切都是允许的。”首先,让我们看看如果没有调用,会发生什么。允许
。在Rails 5.0控制台中:
> params = ActionController::Parameters.new({yes: "y", no: "n"})
> params.to_h
{} # empty hash because nothing has been permitted
> params.to_unsafe_h
{"yes"=>"y", "no"=>"n"} # raw values with no warning; you asked for it
> params.to_hash
# (puts deprecation warning - if you want unsafe values, say so)
{"yes"=>"y", "no"=>"n"} # returns raw values
但是,如果调用
。允许首先,无法获取不允许的值。
> params = ActionController::Parameters.new({yes: "y", no: "n"})
> params = params.permit(:yes)
# (puts warning about unpermitted parameter :no)
> params.to_h
{"yes"=>"y"} # permitted values only
> params.to_unsafe_h
{"yes"=>"y"} # permitted values only
> params.to_hash
# (puts deprecation warning, but still safe)
{"yes"=>"y"} # permitted values only
因此:
始终使用.准许
将您期望的值列入白名单
- 使用
。to_h
确保如果您忘记了第1步,则不会通过 - 如果您真的想要原始值,请不要调用
。许可
并调用。to_unsafe_hash
- 不要打电话给
。to_hash
因为那现在含糊不清
问题内容: DeprecationWarning:需要一个整数(got类型为float)。不建议使用隐式转换为整数,并且在将来的Python版本中可能会删除隐式转换。 DeprecationWarning:需要一个整数(got类型为float)。不建议使用隐式转换为整数,并且在将来的Python版本中可能会删除隐式转换。 问题答案: 警告与的坐标参数有关。浮点坐标将表示的原点位于窗口像素之间。那没
问题内容: 我正在使用react-navigation实现2个屏幕。但是导航到第二页时出现以下警告: 警告:isMounted(…)在纯Javascript类中已弃用。相反,请确保在componentWillUnmount中清除订阅和未决请求,以防止内存泄漏。 版本: 反应:16.3.1 反应本机:0.55.2 反应导航:1.5.11 效用:0.10.3 Login.js Home.js 我在这里
就在最近,上下文。getResources()。updateConfiguration()在Android API 25中已被弃用,我需要更改用户选择的应用程序的语言。我正在使用此方法更改语言 但由于受到了不推荐的api警告,我刚刚开始android开发。因此,任何建议都将有助于解决此警告。
我们有一个Java项目。我们为javac启用了Xlint(启用警告)和Werror(将警告视为错误)标志,以确保我们的代码没有警告。最近我们决定不推荐一个类。问题是在某些情况下,SuppressWarnings(“弃用”)根本不会抑制弃用警告,从而导致生成失败。下面是我遇到的用例列表: > 在其他未弃用的类中导入。 在其他已弃用的类中导入。 家长班。 类型参数。例如 但是,即使没有“抑制”,此选项
问题内容: 我刚刚更新到Django v1.8,并在更新项目之前测试了本地设置,并且发出了弃用警告,这是我从未见过的,对我也没有任何意义。我可能只是忽略了某些内容或误解了文档。 现在,这对我提出了3个问题。 根据文档,Options.app_label除非模型不在应用程序模块之外,否则不是必需的,在我看来,不是这样。其次,无论如何,此行为在1.7中已被弃用,那么为什么它甚至成为问题? 这些应用程序
问题内容: 我有一个React组件,我想在单击时切换一个CSS类。 所以我有这个: 这个问题是ESLint不断告诉我“ this.refs”已贬值。 我该怎么办?我如何解决它而不使用折旧的代码? 问题答案: 您要引用的Lint规则称为 no-string-refs, 并通过以下方式警告您: 之所以收到此警告,是因为已实现了不赞成使用的使用方式(通过使用字符串)。根据您的React版本,您可以执行以