ruby on rails - elaborando - ¿Son los scrub_params de Phoenix los parámetros fuertes de Rails?
ruby server (1)
La documentación para el método scrub_params
Phoenix scrub_params
está muy clara para mí. Parece que esta funcionalidad es similar a la característica de parámetros fuertes de Rails. Sin embargo, cuando lo usas en un controlador como tal,
plug :scrub_params, "user" when action in [:create]
... no está indicando explícitamente qué parámetros desea incluir en la lista blanca. He mirado el código de scrub_params
, pero no soy lo suficientemente novedoso con Elixir que no estoy muy seguro de lo que está pasando.
¿Este método se limita a observar el modelo y utilizar los atributos de módulo de campo requeridos y opcionales para los parámetros de la lista blanca?
Además, la documentación de scrub_params
dice que "comprueba si la scrub_params
está presente". ¿Qué es la "clave requerida"? ¿Son solo los campos requeridos del modelo?
La función scrub_params/2 no es realmente como los parámetros fuertes de Rails. En Ecto, define la clave permitida en su función de conjunto de cambios utilizando Ecto.Changeset.cast/4 .
Los parámetros de Scrub hacen lo siguiente:
- Asegúrese de que existe la clave requerida.
- Cambie los valores vacíos del mapa en params con la clave requerida a
nil
Por ejemplo, llamando a:
plug scrub_params "user"
Verificará la presencia de una clave de "usuario". De scrub_params/2 :
Si la required_key no está presente, generará Phoenix.MissingParamError.
Si tienes un mapa de parámetros que se parece a:
%{"user" => %{"name" => "foo", "age" => ""}}
Entonces el parámetro "edad" se convertiría a nil
. Esto le permite llamar a su función de conjunto de cambios directamente con los parámetros:
def create(conn, %{"user" => user_params}) do
User.changeset(user_params)
end
scrub_params/2
tiene scrub_params/2
relación con su modelo, simplemente funciona bien con Ecto ya que la función Ecto.Changeset.cast/4
toma un conjunto de campos obligatorios y un conjunto de campos opcionales. Pasar nil
a un campo requerido invalidará el conjunto de cambios y agregará un error para el campo.