【问题标题】:Rails 5: Unpermitted parameterRails 5:不允许的参数
【发布时间】:2017-10-16 14:36:18
【问题描述】:

我正在尝试使用 cocoon gem 保存嵌套模型。这是参数json:

Parameters: {
  "utf8" => "✓",
  "authenticity_token" => "w/hwSu6yvT/R+6KFdoi7L6v3tDYJppiXyvQigBfTpD6EuTVz9P2CKImybxgip90YA0Yo7QKpID+IeCi2KLsy0g==",
  "project" => {
    "client" => "1", "name" => "Project 1", "instances_attributes" => {
      "1508163439344" => {
        "instances" => {
          "user_id" => "user1", "password" => "[FILTERED]", "service_url" => "http://localhost:3001"
        }
      }, "1508163446859" => {
        "instances" => {
          "user_id" => "user2", "password" => "[FILTERED]", "service_url" => "http://localhost:3002"
        }
      }
    }
  },
  "commit" => "Create Project"
}

对于项目控制器中的强参数代码:

def project_params
  params
  .require(:project)
  .permit(
    :client, :name,
    instances_attributes: Instance.attribute_names.map(&:to_sym).push(:_destroy)
  )
end

现在当我尝试保存时,它显示:Unpermitted parameter: instances

我错过了什么?

【问题讨论】:

  • 你试过instance_attributes,单数吗?另外我认为你必须将 :id 属性传递给 cocoon 列表,但我不确定
  • :id 由Instance.attribute_names.map(&:to_sym)处理
  • @RajMishra 检查我的解决方案。它应该对你有用
  • 实际上问题出在reject_if..的proc模型中。

标签: ruby-on-rails cocoon-gem


【解决方案1】:

您有 2 个解决方案:

  • 允许所有instances_attributes 内容:

    def project_params
      params.require(:project).permit(:client, :name).permit!(:instances_attributes)
    end
    
  • 允许所有instances_attributes 键:

    def project_params
      instances_keys = (params[:project] || {})[:instances_attributes].keys
      params.require(:project).permit(:client, :name, instances_attributes: instances_keys)
    end
    

【讨论】:

  • 还是Unpermitted parameter: instances
【解决方案2】:

您是否注意到您的参数。在instances_attributes 内,您再次嵌套了名为 *instances 的哈希。所以你也需要允许他们。 如下更新您的project_params

def project_params
  params
  .require(:project)
  .permit(
    :client, :name,
    instances_attributes: [:instances=> Instance.attribute_names.map(&:to_sym).push(:_destroy)]
  )
end

【讨论】:

  • instances_attributes 不是数组。这行不通。
  • @AntoineDewaele 签入控制台。经过测试
猜你喜欢
  • 2019-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多