Ответ 1
Функция scrub_params/2 на самом деле не похожа на сильные параметры Rails. В Ecto вы определяете разрешенный ключ в своей функции набора параметров с помощью Ecto.Changeset.cast/4.
Параметры Scrub выполняют следующие действия:
- Убедитесь, что требуемый ключ существует.
- Измените пустые значения с карты в параметрах с требуемым ключом на
nil
Например, вызов:
plug scrub_params "user"
Будет проверять наличие ключа "пользователь". Из документов:
Если искомая_имя отсутствует, она поднимет Phoenix.MissingParamError.
Если у вас есть карта params, которая выглядит так:
%{"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
в требуемое поле приведет к аннулированию набора изменений и добавит ошибку для этого поля.