gpt4 book ai didi

ruby-on-rails - Phoenix 的scrub_params 是不是像Rails 的强参数?

转载 作者:行者123 更新时间:2023-12-03 10:38:22 25 4
gpt4 key购买 nike

Phoenix 的文档 scrub_params方法对我来说有点不清楚。看起来这个功能类似于 Rails 的强参数功能。但是,当您在这样的 Controller 中使用它时,

plug :scrub_params, "user" when action in [:create]

...您没有明确说明要将哪些参数列入白名单。我查看了 scrub_params 的代码,但我对 Elixir 不够了解,我不太确定发生了什么。

这种方法是否只是查看模型并使用必需和可选字段模块属性来将参数列入白名单?

此外, scrub_params文档说它“检查 required_key 是否存在”。什么是“必需的 key ”?这只是模型中的必填字段吗?

最佳答案

scrub_params/2函数并不像 Rails 的强参数。在 Ecto 中,您可以使用 Ecto.Changeset.cast/4 在变更集函数中定义允许的键。 .

Scrub 参数执行以下操作:

  • 确保存在所需的 key 。
  • 使用所需键将映射中的空值更改为 nil

  • 例如,调用:
    plug scrub_params "user"

    将检查是否存在“用户” key 。来自 the docs :

    If the required_key is not present, it will raise Phoenix.MissingParamError.



    如果您有一个看起来像这样的参数映射:
    %{"user" => %{"name" => "foo", "age" => ""}}

    然后“年龄”参数将转换为 nil .这允许您直接使用参数调用您的变更集函数:
    def create(conn, %{"user" => user_params}) do
    User.changeset(user_params)
    end
    scrub_params/2与您的模型完全无关,它只适用于 Ecto,因为 Ecto.Changeset.cast/4函数接受一组必填字段和一组可选字段。路过 nil到必填字段将使变更集无效并为该字段添加错误。

    关于ruby-on-rails - Phoenix 的scrub_params 是不是像Rails 的强参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33975229/

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