首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强参数:条件参数

强参数:条件参数
EN

Stack Overflow用户
提问于 2015-10-19 17:03:26
回答 1查看 1.2K关注 0票数 0

我希望在输入表单中传递基于选择(是/否对3个单个复选框的响应)的条件参数。我试过使用if然后else方法,但由于8种不同的选项,这显然不是很优雅。有人能提供一个更好的解决方案吗?

我偶然看到下面的帖子,试着解释,但找不出正确的答案。

Strong Parameters: How to permit parameters using conditions

预期结果:如果单击给定的复选框,就会更新特定的嵌套模型/创建实例,否则不是。 我对参数的尝试

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2015-10-20 07:23:09

为了达到8甚至更多,我会把你重复的逻辑放在一个循环中。然后将动态部分(下面粗体)抽象到数组中。

[:cond1_attributes:name,:country[ if params:lapp==1 ]

数组的外观如下所示:

代码语言:javascript
复制
possible_conditions = [
    {number: "1", value: "country"},
    {number: "2", value: "course"}
]

然后,您可以以以下方式遍历数组:

代码语言:javascript
复制
possible_conditions.each { |pc|
  list_params_allowed += ["cond#{pc[:number]}_attributes"[:name,pc[:value]]] if params[:lapp]["ind_var#{pc[:number]}"]==1
}

用插值字符串替换常量符号(如:cond1_attributes )是可以的,因为这在功能上是等价的。希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33220030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档