强参数:条件参数
问题描述:
我想在输入表单中根据选择传递条件参数(是/否响应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
答
为了缩放到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,因为这在功能上是等效的。希望这可以帮助!