enkr1

enkr1

Hi community,

I am doing a test case and I have an associative table with FKs user_id and role_id. When I tried to insert with the repeated FKs (1, 1) like:

%User
|> User.creation_changeset(%{
  email: "unqiue@gmail.com",
  password: "superstrongpassword",
  role_ids: [1, 1] # I have some pre-process to convert ID list to object
})
|> Repo.insert()

My user_role changeset:

def changeset(user_role, attrs) do
  user_role
  |> cast(attrs, [:user_id, :role_id])
  |> validate_required([])
  |> unique_constraint([:role_id, :user_id], name: :user_role_items_user_id_role_id_index)
end

And this is the error i get:

     test/perfreview/accounts_test.exs:586
     ** (Ecto.ConstraintError) constraint error when attempting to insert struct:
     
         * user_role_items_user_id_role_id_index (unique_constraint)
     
     If you would like to stop this constraint violation from raising an
     exception and instead add it as an error to your changeset, please
     call `unique_constraint/3` on your changeset with the constraint
     `:name` as an option.
     
     The changeset defined the following constraints:
     
         * users_email_index (unique_constraint)

# ...

I have tested the changeset, it is working fine. Just that the changeset cannot be hit in put_assoc/3.

Thank you so much in advance.

Best wishes,
Jing Hui PANG.

Showing Posts 1 to 2

alexsysm

alexsysm

are you sure that you made a unique index before you query?

quote “”"
The changeset defined the following constraints:
* users_email_index (unique_constraint)
“”"

I am guessing that you just created email index only.

enkr1

enkr1 OP

Yes that is the boilerplate code from user auth:

def creation_changeset(user, attrs, opts \\ []) do 
  user
  |> cast(attrs, [:email, :password])
  |> validate_email()
  |> validate_password(opts)
  |> confirm_changeset()
  |> put_assoc(:roles, parse_roles(attrs)) 
end

defp validate_email(changeset) do
  changeset
  |> validate_required([:email])
  |> validate_format(:email, ~r/^[^\s]+@[^\s]+$/, message: "must have the @ sign and no spaces")
  |> validate_length(:email, max: 160)
  |> unsafe_validate_unique(:email, Perfreview.Repo)
  |> unique_constraint(:email)
end
— All posts loaded —

Where Next? Top

Trending in Questions Top

katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
achenet
Hello, I’m trying to build a basic Phoenix web-app, and I’d like to use Tailwind. However, when I launch mix phx.server, I get an error...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
Cxx-mlr
I’m working on a small exercise involving update_in/3, and I came up with this solution: data = %{ name: "Periodic Table", category:...
New
ChrisAmelia
I’ve got trouble wrapping my head around the order in which functions are called in this snippet (from Phoenix’s authentication): toke...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews