Phoenix scrub_params
メソッドのドキュメントは私には少し不明確です。この機能はRails強力なパラメーター機能に似ているようです。ただし、このようなコントローラーで使用する場合は、
plug :scrub_params, "user" when action in [:create]
...ホワイトリストに登録するパラメータを明示的に指定していません。 scrub_params
のコードを見てきましたが、Elixirについては十分に知識がないので、何が起こっているのかよくわかりません。
この方法は、モデルを調べて、パラメーターをホワイトリストに登録するために必須およびオプションのフィールドモジュール属性を使用するだけですか?
また、scrub_params
のドキュメントには、「required_keyが存在するかどうかを確認する」と記載されています。 「必須鍵」とは何ですか?それはモデルの必須フィールドだけですか?
scrub_params/2 関数は実際にはRails強力なパラメーターとは異なります。Ectoでは、 Ecto.Changeset.cast)を使用してチェンジセット関数で許可されたキーを定義します。/4 。
スクラブパラメータは次のことを行います。
nil
に変更しますたとえば、次のように呼び出します。
plug scrub_params "user"
「ユーザー」キーの存在を確認します。から ドキュメント :
Required_keyが存在しない場合、Phoenix.MissingParamErrorが発生します。
次のようなパラメータマップがある場合:
%{"user" => %{"name" => "foo", "age" => ""}}
次に、「age」パラメータはnil
に変換されます。これにより、パラメータを使用してチェンジセット関数を直接呼び出すことができます。
def create(conn, %{"user" => user_params}) do
User.changeset(user_params)
end
scrub_params/2
はモデルとはまったく関係がなく、Ecto.Changeset.cast/4
関数は必須フィールドのセットとオプションフィールドのセットを受け取るため、Ectoでうまく機能します。 nil
を必須フィールドに渡すと、変更セットが無効になり、フィールドにエラーが追加されます。