2015-10-19 79 views
0

我想在輸入表單中根據選擇傳遞條件參數(是/否響應3個單獨的複選框)。我嘗試過使用if then else的方法,但由於8種不同的選項,顯然不夠優雅。有人可以提供更好的解決方案嗎?強參數:條件參數

我遇到以下帖子,並嘗試我的解釋,但無法弄清楚正確的答案。

Strong Parameters: How to permit parameters using conditions

預期成果: 如果點擊一個給定的複選框特定的嵌套的模型被更新/實例創建,否則不

我試圖在參數

def lapp_params 
    list_params_allowed = [:amount] 
    list_params_allowed += [:cond1_attributes[:name, :country]] if params[:lapp][:ind_var1]==1 
    list_params_allowed += [:cond2_attributes[:name,:course]] if params[:lapp][:ind_var2]==1 
    list_params_allowed += [:cond3_attributes[:name,:company]] if params[:lapp][:ind_var3]==1 

    params.require(:lapp).permit(list_params_allowed).merge(user_id: current_user.id) 
end 

回答

0

爲了縮放到8或ev更重要的是,我會把你的重複邏輯放在一個循環中。然後將動態部分(以粗體顯示)抽象爲數組。

list_params_allowed + = [:COND _attributes [:名稱,:國家]]如果PARAMS [:LAPP] [:ind_var ] == 1

陣列看起來像這樣的:

possible_conditions = [ 
    {number: "1", value: "country"}, 
    {number: "2", value: "course"} 
] 

,那麼你可以遍歷數組中的下列方式:

possible_conditions.each { |pc| 
    list_params_allowed += ["cond#{pc[:number]}_attributes"[:name,pc[:value]]] if params[:lapp]["ind_var#{pc[:number]}"]==1 
} 

可以用一個插值字符串替換常量符號,例如:cond1_attributes,因爲這在功能上是等效的。希望這可以幫助!