2017-03-11 11 views
2

私はこのコード行を3日間作業しています。私は次のように強いのparams持っ :Rails - ネストされた属性から空のフィールドを削除する強力なパラメータ

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

方法param_cleanlocation_params空のフィールドから削除されますが、それは、ネストされたでは動作しません:をads_attributes。 主な理由は、param_cleanは、location_paramsで呼び出すことができます。このクラスは、ActiveController :: Parametersです。私は、これはこれはの値であるlocation_params

<ActionController::Parameters {"country"=>"", "ads_attributes"=><ActionController::Parameters {"remote"=>"0", "days"=>""} permitted: true>} permitted: true> 

の値である私は、次のエラーメッセージが表示さ

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

方法にV

undefined method `param_clean' for #<ActionController::Parameters:0x007f..> 

param_clean

を呼び出すことはできません vエラーが発生したときの変数

<ActionController::Parameters {"remote"=>"0", "days"=>""} permitted: true> 

v.class => ActionController::Parameters 

このメソッドは、ネストされたパラメータでは機能しません。あなたの助けのための おかげでたくさん

よろしく ファブリツィオ

+0

うまくましたか? – Aegis

+0

私はテストする必要があります、私はちょうど目を覚ました。ありがとうございました –

答えて

1

問題はparam_clean方法がActionController::Parametersクラスで定義されていないということです。だから、あなたはどちらかによって、あなたのアプローチを変更する必要があります。

  • 方法が含まれるようにActionController::Parametersを拡張(私はそれをお勧めしますしないように)。
  • メソッドをリファクタリングします。次のようにそれを行うための1つの方法は、次のようになります。私の解決策はあなたのため

    def param_clean(_params) 
        _params.delete_if do |k, v| 
        if v.instance_of?(ActionController::Parameters) 
         param_clean(v) 
        end 
        v.empty? 
        end 
    end 
    
    # how to use it 
    param_clean(location_params) 
    
+0

こんにちはAegis。あなたの答えは、このコミュニティがとても素晴らしい**理由です。私はこれに3日間いましたが、これだけでは決して解決しません。どうもありがとう。 Fabrizio Bertoglio –

+0

あなたを助けてくれてうれしい – Aegis

関連する問題