Ecto add/3 по умолчанию не работает должным образом

У меня проблемы с получением значения по умолчанию для использования. Я считаю, что настроил его правильно, но, похоже, он не работает. При запросе новые записи не имеют ничего (ничего, пробел) в PGAdmin вместо предполагаемого 0.

Миграция:

    create table(:teachers) do
      add :login, :string
      add :password, :string
      add :email, :string
      add :role, :integer, default: 0

      timestamps
    end

Модель:

defmodule Ep.Teacher do
  use Ep.Web, :model

  schema "teachers" do
    field :login, :string
    field :password, :string
    field :email, :string
    field :role, :integer

    has_many :tests, Ep.Test, on_delete: :fetch_and_delete

    timestamps
  end

  @required_fields ~w(login password email)
  @optional_fields ~w(role)

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

Статистика таблицы PGAdmin:

CREATE TABLE public.teachers
(
  id integer NOT NULL DEFAULT nextval('teachers_id_seq'::regclass),
  ....
  role integer DEFAULT 0,
  ....
  CONSTRAINT teachers_pkey PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE public.teachers
  OWNER TO postgres;

Контроллер:

 def create(conn, %{"teacher" => teacher_params}) do
    IO.inspect teacher_params
    changeset = Teacher.changeset(%Teacher{}, teacher_params)
    case Repo.insert(changeset) do
      {:ok, _teacher} ->
        conn
        |> put_flash(:info, "Teacher created successfully.")
        |> redirect(to: teacher_path(conn, :index))
      {:error, changeset} ->
        render(conn, "new.html", changeset: changeset)
    end
  end

person Haito    schedule 05.03.2016    source источник
comment
Каков результат IO.inspect teacher_params в методе create?   -  person arathunku    schedule 06.03.2016
comment
хорошо, student_params были неадекватны, потому что по умолчанию они применялись без указания дополнительных параметров в параметрах.   -  person Haito    schedule 06.03.2016


Ответы (1)


В модели вам нужно будет добавить default: 0, как показано ниже:

defmodule Ep.Teacher do
  use Ep.Web, :model

  schema "teachers" do
    field :login, :string
    field :password, :string
    field :email, :string
    field :role, :integer, default: 0

    has_many :tests, Ep.Test, on_delete: :fetch_and_delete

    timestamps
  end

  @required_fields ~w(login password email)
  @optional_fields ~w(role)

  def changeset(model, params \\ :empty) do
    model
    |> cast(params, @required_fields, @optional_fields)
  end
end
person savsr    schedule 05.03.2016