ChangeSet Ecto.Model все поля Struct равны нулю

Я работаю над некоторыми фреймворками Phoenix и столкнулся со странной проблемой (как обычно). Всякий раз, когда я пытаюсь создать некоторых пользователей, я получаю пользователя со всеми полями, установленными на ноль. Я использую Mongo.Ecto/

def post_login(conn, %{"login" => login, "password" => password}) do
    # IO.inspect Plug.Conn.read_body(conn)
    a = User.changeset(%User{}, %{"login" => "login", "password" => "password"})
    IO.inspect a
    Repo.insert( a )
    redirect conn, to: "/default"
end

И модель:

defmodule HelloWorld.User do
  use HelloWorld.Web, :model

  @primary_key {:id, :binary_id, autogenerate: true}
  schema "users" do
    field :login, :string
    field :password, :string
  end


  @required_fields ~w()
  @optional_fields ~w()
  def changeset(model, params \\ :empty) do
    model
    |> cast(params, @required_fields, @optional_fields)
  end
end

И скрин из консоли:

введите здесь описание изображения

Как вы можете видеть на картинке, поля для входа и пароля пустые, что заставляет меня чувствовать, что я сделал что-то невероятно глупое.


person Haito    schedule 25.10.2015    source источник


Ответы (1)


Поля должны существовать в параметрах функции cast/4:

  @required_fields ~w()
  @optional_fields ~w(login password)
  def changeset(model, params \\ :empty) do
    model
    |> cast(params, @required_fields, @optional_fields)
  end

Все, что находится в required_fields, но не в params, добавит ошибку в это поле в наборе изменений. Если вы хотите, чтобы поля были обязательными, просто переместите их в список required_fields.

person Gazler    schedule 25.10.2015
comment
Я ввел кому между ними... Глупый я. Большое спасибо за почти мгновенный ответ (почти мгновенный феникс). - person Haito; 26.10.2015