Elixir 每个用户的唯一约束
考虑以下Elixir 每个用户的唯一约束,elixir,phoenix-framework,ecto,unique-constraint,Elixir,Phoenix Framework,Ecto,Unique Constraint,考虑以下变更集: defmodule Flashcards.Cards.Deck do use Ecto.Schema import Ecto.Changeset schema "decks" do field :name, :string field :user_id, :id timestamps() end @doc false def changeset(deck, attrs) do deck |> cast
变更集
:
defmodule Flashcards.Cards.Deck do
use Ecto.Schema
import Ecto.Changeset
schema "decks" do
field :name, :string
field :user_id, :id
timestamps()
end
@doc false
def changeset(deck, attrs) do
deck
|> cast(attrs, [:name, :user_id])
|> validate_required([:name])
|> unique_constraint(:name)
end
end
unique\u约束
(以及迁移中的unique\u索引
)使名称
字段在所有用户中都是唯一的
然而,实际上,我想让每个用户的名称字段都是唯一的-最好的方法是什么?添加
create index(:decks, [:user_id, :name], unique: true)
添加到您的迁移文件中
create index(:decks, [:user_id, :name], unique: true)
转到您的迁移文件谢谢!我认为index
的name
参数具有类型atom
:可能应该提到unique\u约束(:name)
将不再有效<代码>唯一约束(名称:decks\u user\u id\u name\u index)
如果没有提供自定义索引名称应该可以谢谢,我使用了唯一约束(:name,[name::decks\u user\u id\u name\u index])
。谢谢!我认为index
的name
参数具有类型atom
:可能应该提到unique\u约束(:name)
将不再有效<代码>唯一约束(名称:decks\u user\u id\u name\u index)
如果没有提供自定义索引名称,应该可以。谢谢,我使用了唯一约束(:name,[name::decks\u user\u id\u name\u index])
。