2017-10-16 66 views
0

我试图用茧宝石保存嵌套模型。这里是PARAMS JSON:Rails 5:未经许可的参数

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

我缺少什么?

+0

你试过instance_attributes,奇异?此外,我认为你必须通过:ID属性的茧列表,但我不知道 –

+0

:id正在处理'Instance.attribute_names.map(&:to_sym)' –

+0

@RajMishra检查我的解决方案。它应该为你工作 – krishnar

回答

0

你有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 
    
+0

它仍然是'不允许的参数:实例' –

0

你有没有注意到你的PARAMS。在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 
+0

instances_attributes不是一个数组。这不起作用。 –

+0

@AntoineDewaele检查控制台。经过测试 – krishnar