2017-03-10 3 views
0

アクションコントローラのパラメータのメソッドを呼び出し。Railsの - 私は私の<strong>強いのparams</strong>空白になっているすべてのフィールドから削除する議論</strong>以下<strong>で見つかった<strong>方法</strong>を実装しようとしています

class Hash 
    def delete_blank 
    delete_if{|k, v| v.empty? or v.instance_of?(Hash) && v.delete_blank.empty?} 
    end 
end 

p hash.delete_blank 
# => {"y"=>"content"} 

How to recursively remove all keys with empty values from (YAML) hash?

これは私が空のフィールドを削除するlocation_paramsです:私はlocation_params

上で次の delete_blankメソッドを呼び出すときに、次のエラーがトリガー

def location_params 
params.require(:location).permit(:country, {:ads_attributes => [:remote]}) 
end 

undefined method "delete_blank" for #<ActionController::Parameters:0x007.....> 

私の意見は、私は私ののRailsプロジェクトハッシュクラスを変更する必要があることですが、私はそれを行う方法がわからないと、私はそれが最善の解決策ではないかもしれないと思います。あなたの助けのための

どうもありがとう ファブリツィオ

答えて

3

はRailsのparamsメソッドによって返された構造は、ハッシュのように見えますが、実際にはActionController::Parametersのインスタンスです。 delete_blank以来

ActionController::Parametersに定義されていますが、Hashにこのエラーが発生しますされていません:undefined method "delete_blank" for #<ActionController::Parameters...

あなたは2つのオプションがあります。

A)をActionController::Parameters上のメソッドを定義します。

class ActionController::Parameters 
    def delete_blank 
    delete_if{|k, v| v.empty? or v.instance_of?(Hash) && v.delete_blank.empty?} 
    end 
end 

かB)ActionController::ParametersのインスタンスをHashに変換し、メソッドを呼び出して翻訳し直します。

ActionController::Parameters.new(params.to_h.delete_blank).permit! 
+0

どうもありがとう! –

関連する問題

 関連する問題