2017-03-11 97 views
2

我一直在研究這行代碼三天。 我有以下的強PARAMS:Rails - 從嵌套屬性中刪除空字段的強參數

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

的方法param_clean將從location_params的空字段刪除,但它不會與嵌套工作:ads_attributes。 主要原因是param_clean只能調用location_paramsActiveController :: Parameters。我不能v方法param_clean

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

我收到以下錯誤

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

這是location_params值調用

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

這就是價值v錯誤觸發時變量

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

v.class => ActionController::Parameters 

該方法不適用於嵌套參數。 非常感謝您的幫助

問候 法布里奇奧

+0

難道我的解決方案制定出你:做這將是如下的一種方式? – Aegis

+0

我必須測試,我剛醒來。非常感謝 –

回答

1

的問題是,param_clean方法不ActionController::Parameters類中定義。所以,你必須改變你的方法,通過:

  • 擴展ActionController::Parameters包括該方法(不是我會推薦它)。
  • 重構該方法。

    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

你好安吉斯。你的回答是這個社區如此**的原因**。我只是在這個3天,我永遠不會解決這個問題。非常感謝。 Fabrizio Bertoglio –

+0

很高興幫助你 – Aegis