【问题标题】:Rails params: where did _json come from, and how do I whitelist it's contents?Rails 参数:_json 来自哪里,如何将其内容列入白名单?
【发布时间】:2020-12-24 02:09:12
【问题描述】:

我正在编写 Rails API 并尝试通过将 JSON 数组传递到控制器来同时创建多个记录,如下所示:

[
    {
        "workflow_id": 1,
        "action": "Some Other Action",
        "order": 2,
        "notes": null
    },
    {
        "workflow_id": 1,
        "action": "Some Action",
        "order": 1,
        "notes": null
    }
]

当我查看进入控制器的参数时,我看到的是这样的:

<ActionController::Parameters {"_json"=>[{"workflow_id"=>1, "action"=>"Some Other Action", "order"=>2, "notes"=>nil}, {"workflow_id"=>1, "action"=>"Some Action", "order"=>1, "notes"=>nil}], "controller"=>"workflow_steps", "action"=>"update", "workflow_id"=>"1", "workflow_step"=>{}} permitted: false>

首先,我不熟悉_json。这是传入数组时的 Rails 约定吗?我找不到任何关于它的文档。

第二,当我尝试这个时:WorkflowStep.create(params[:_json]) 我得到了预期的ForbiddenAttributesError。但是,我无法弄清楚如何正确地将数组中的 json 对象列入白名单。我试过这些:

params.require(:_json).permit(_json: [:workflow_id, :action, :notes, :order])
params.permit(_json: [:workflow_id, :action, :notes, :order])

但我收到此错误:undefined method permit' for #Array:0x00007ffdeb0f8188`

我不确定如何继续。谢谢。

【问题讨论】:

    标签: ruby-on-rails rails-activerecord


    【解决方案1】:

    params.require(:_json) 返回一个 ActionController::Parameters 对象数组,因此您可以使用以下代码将其列入白名单:

    params.require(:_json).map do |param| 
      param.permit(:workflow_id, :action, :order, :notes).to_h
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-09
      • 1970-01-01
      • 2016-07-02
      • 1970-01-01
      相关资源
      最近更新 更多