gpt4 book ai didi

ruby-on-rails - Rails 5 允许 JSON 字段通过强参数不起作用

转载 作者:行者123 更新时间:2023-12-03 16:02:42 25 4
gpt4 key购买 nike

我试图让我的模型中深度嵌套的 JSON 字段(文档 => field_instance => 值)通过。由于对 documentation 的误解,我使用了空散列。 .

允许!可以做我需要的,但我试图避免简单地做 params.fetch(:document).permit!由于巨大的安全漏洞,这会打开。那么,如何仅允许双重嵌套的 JSON 值“参数”下的任何类型的任何结构?

我正在使用名为 text 的值下的单个字符串进行测试,并且得到“Unpermitted parameter: text”

每个 instance_field 都有一个特定类型,其中包含一个必需参数列表,但没有特定于文档中每个 instance_field 的方法,我选择只允许该 JSON 字段下的所有参数。

这是我的 document_params 方法:

params.fetch(:document)
.permit(:structure_id, :field_instances_attributes => [
:value,
:document_id,
:field_id,
:value_attributes => {}
])

那么,我在这里做错了什么?

或者,甚至更好:每个 field_instance 都有一个类型,它知道该字段的值期望的确切结构。我可以具体说明每个 field_instance 值下允许的字段吗?

相关日志:
service_1  |   Parameters: {"utf8"=>"Ô£ô", "authenticity_token"=>" -- censored --", "document"=>{"structure_id"=>"1", "field_instances_attributes"=>[{"document_id"=>"0", "field_id"=>"1", "value_attributes"=>{"text"=>"asdf"}}]}, "commit"=>"Create Document"}
service_1 | Unpermitted parameter: text
service_1 | Unpermitted parameter: text
service_1 | #<FieldInstance id: nil, field_id: 1, document_id: nil, value: nil, created_at: nil, updated_at: nil>

最佳答案

在多个步骤中构建 params 哈希实际上非常简单,但它有点不明显。

这是我所做的:

def document_params
@document_params ||= params.require(:document).permit(:structure_id, field_instance_atributes: %i[document_id field_id]).tap do |doc|
doc[:value] = params[:document].require(:value).permit!
end
end

如果 value对象清理真的很复杂,也许把它写成它自己的助手并在这里使用它。

重要的部分是 require的使用:它将内部值作为新对象返回,因此对它的操作不会影响 params .可以说,您可以根据需要多次返回井中。

警告: require会抛出 ActionController::ParameterMissing如果没有找到 key 。

关于ruby-on-rails - Rails 5 允许 JSON 字段通过强参数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44465990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com