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です。たぶん他のgemはあります。スタックトレースを提供する価値があるとは思わなかったので、私は伝える方法がありません。プロのヒント-通常isスタックトレースを提供する価値があります!)
とにかく、私はリンクをたどり、代替品を見つけることを計画しましたが、 merge
メソッドは表示されませんappear非推奨 になりますが、非推奨ステータスを文書化するのを忘れてしまったのかもしれません。
だから私はこれをクリアするために何をすべきか?
.to_h
を使用Rails PRに対するコメント に従って、.to_h
を呼び出して安全なハッシュを取得できます。
現在、パラメーターをハッシュに変換する方法は3つあります。
.to_h
は、「.permit
を呼び出していない場合は、何も許可されていないと想定する」という意味です。.to_unsafe_h
は、「.permit
を呼び出していない場合、すべてが許可されていると想定する」という意味です。.to_hash
があいまいになりました。 Railsは.to_unsafe_h
のように処理しますが、上記の2つのオプションのどちらを使用するかを明示的に指定していないため、警告を出力します。まず、.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
ただし、.permit
を最初に呼び出すと、許可されていない値を取得する方法はありません。
> 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
そう:
.permit
を使用して、期待する値をホワイトリストに登録してください.to_h
を使用して、ステップ1を忘れた場合に何も処理されないようにします.permit
を呼び出して.to_unsafe_hash
を呼び出さないでください.to_hash
を呼び出さないでください。