Rails 5:未经许可的参数
我试图用茧宝石保存嵌套模型。这里是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
我缺少什么?
你有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
它仍然是'不允许的参数:实例' –
你有没有注意到你的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
instances_attributes不是一个数组。这不起作用。 –
@AntoineDewaele检查控制台。经过测试 – krishnar
你试过instance_attributes,奇异?此外,我认为你必须通过:ID属性的茧列表,但我不知道 –
:id正在处理'Instance.attribute_names.map(&:to_sym)' –
@RajMishra检查我的解决方案。它应该为你工作 – krishnar