在rails中将深层嵌套的强参数列入白名单

时间:2014-06-11 19:25:22

标签: ruby-on-rails ruby-on-rails-4 strong-parameters ransack

我试图在文本列中存储序列化的Ransack搜索。它深深地嵌套了,我正在努力想出它的许可证。这是一个示例哈希:

{
  "c"=>{
    "0"=>{
      "a"=>{
        "0"=>{
          "name"=>"column_1"
        }
      },
      "p"=>"eq",
      "v"=>{
        "0"=>{
          "value"=>"value_1"
        }
      }
    },
    "1"=>{
      "a"=>{
        "0"=>{
          "name"=>"column_2"
          }
      },
      "p"=>"cont",
      "v"=>{
        "0"=>{
          "value"=>"value_2"
        }
      }
    }
  }
}

你会怎么写许可证?这是我阅读文档的最佳猜测,但它不起作用。

def course_listing_params
  params.require(:course_listing).permit({ q: { c: [{ a: [:name] }, :p,  { v: [:value] }] } })
end

1 个答案:

答案 0 :(得分:-1)

我最终构建了另一个模型来存储条件,并使用accepts_nested_attributes_for在course_listing控制器中创建所有条件。

我必须添加

conditions_attributes: [:id, :attr, :pred, :val, :_destroy]

到我的许可证电话,以使一切正常。中间三个是我自己的属性,:id阻止Rails在每次编辑时添加新条件,并且:_destroy是为了删除条件。