tutorial rails elaborando crear con apis ruby-on-rails elixir phoenix-framework ecto

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.