0
のためのユニークなcontrantを評価することはできません私は、既存のデータベースを持っていると私はエクト内の任意の移行を持っていけないそのテーブルの一意のインデックスエリクサーでエクトを使用して、これは既存のインデックス
ALTER TABLE ONLY users ADD CONSTRAINT unique_document_id UNIQUE (document_id);
がある、と私はチェンジセットを使って新しいレコードを挿入したい。ここでは、モデルからコードと
defmodule User do
use Ecto.Schema
schema "users" do
field :name
field :email
field :document_id
end
def signup(name, id_number, email) do
changeset = User.changeset(%User{}, %{name: name,
email: email,
document_id: id_number})
if changeset.valid? do
IO.inspect "the chagenset is valid"
user = case Repo.insert(changeset) do
{:ok, model} -> {:ok, model }
{:error, changeset} -> {:error, changeset.errors}
end
end
def changeset(driver, params \\ :empty) do
driver
|> cast(params, [:document_id, :email, :name])
|> validate_required([:document_id, :email, :name])
|> unique_constraint(:document_id)
|> unique_constraint(:email)
end
end
end
を挿入するためのコードがあるしかし、私は重複したユーザーを挿入しようとすると、私はこのエラーを取得し、changeset.valid? (エラーメッセージが言うように、users_document_id_index
されるであろう)、それはデフォルトエクトの規則ではありませんので、あなたがunique_constraint
の呼び出しで制約名を指定する必要が真
11:04:17.896 [error] #PID<0.434.0> running App terminated
Server: localhost:4000 (http)
Request: POST /api/signup
** (exit) an exception was raised:
** (Ecto.ConstraintError) constraint error when attempting to insert struct:
* unique: unique_document_id
If you would like to convert this constraint into an error, please
call unique_constraint/3 in your changeset and define the proper
constraint name. The changeset defined the following constraints:
* unique: users_document_id_index
(ecto) lib/ecto/repo/schema.ex:493: anonymous fn/4 in Ecto.Repo.Schema.constraints_to_errors/3
(elixir) lib/enum.ex:1229: Enum."-map/2-lists^map/1-0-"/2
(ecto) lib/ecto/repo/schema.ex:479: Ecto.Repo.Schema.constraints_to_errors/3
(ecto) lib/ecto/repo/schema.ex:213: anonymous fn/13 in Ecto.Repo.Schema.do_insert/4
(ecto) lib/ecto/repo/schema.ex:684: anonymous fn/3 in Ecto.Repo.Schema.wrap_in_transaction/6
(ecto) lib/ecto/adapters/sql.ex:620: anonymous fn/3 in Ecto.Adapters.SQL.do_transaction/3
(db_connection) lib/db_connection.ex:1275: DBConnection.transaction_run/4
(db_connection) lib/db_connection.ex:1199: DBConnection.run_begin/3