【发布时间】:2016-12-07 05:53:38
【问题描述】:
我正在尝试更新到 Rails 5,我收到以下弃用警告:
弃用警告:方法 to_hash 已弃用,将在 Rails 5.1 中删除,因为
ActionController::Parameters不再继承自散列。使用这种已弃用的行为会暴露潜在的安全问题。如果您继续使用此方法,您可能会在您的应用程序中创建一个可被利用的安全漏洞。相反,请考虑使用以下未弃用的记录方法之一:http://api.rubyonrails.org/v5.0.0/classes/ActionController/Parameters.html(从 /Data/Projects/portal/trunk/app/helpers/application_helper.rb:114 的 column_header 调用)
警告所在的行如下所示:
link_to(name,
{
action: action_name,
params: params.merge({ order: key, page: nil })
},
{
title: "Sort by this field",
}) +
如您所见,我没有打电话给to_hash。也许 Rails 是。也许其他一些宝石是。我无法判断,因为他们认为提供堆栈跟踪不值得。 (专业提示 - 通常值得提供堆栈跟踪!)
所以无论如何,我点击链接,计划寻找替代品,并 the merge method does not appear to be deprecated,但也许他们只是忘记记录弃用状态,所以我不能确定。
那么我应该怎么做才能清除这个?
【问题讨论】:
-
是
params.merge还是link_to调用to_hash? -
我至少查看了 params.merge,但事实并非如此。也许 link_to 会......在这种情况下,我可能会称这个 Rails 的错?我真的不知道。 (这正是为什么堆栈跟踪会很有用 - 我宁愿不必挖掘库资源来找出谁破坏了某些东西)
-
Debugger 建议
link_to调用它,但我介入调查并且它非常深入。我设法验证url_for调用它,但不知道在哪里。那么我的观点应该是他们不应该在自己的图书馆里这样做吗?我的意思是,我已经将一个参数对象传递给从参数生成链接的东西。看来这样做应该没问题。 -
您确定应该通过名为
params的参数将参数指定给url_for,而不是直接在顶层传递参数,如:link_to(name, {action: action_name, order: key, page: nil}.merge(params)? -
如果你真的需要通过
{params: params},试试{params: params.to_h}。
标签: ruby-on-rails ruby ruby-on-rails-5