Hello all,
Strangely, I’m getting this error in production (Gigalixir) but not on local.
ERROR
Request: POST /parent_organizations/1/users
** (exit) an exception was raised:
** (Ecto.ConstraintError) constraint error when attempting to insert struct:
* parent_organizations_users_parent_organization_id_fkey (foreign_key_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 `foreign_key_constraint/3` on your changeset with the constraint
`:name` as an option.
The changeset has not defined any constraint.
(ecto 3.4.5) lib/ecto/repo/schema.ex:700: anonymous fn/4 in Ecto.Repo.Schema.constraints_to_errors/3
(elixir 1.10.4) lib/enum.ex:1396: Enum."-map/2-lists^map/1-0-"/2
(ecto 3.4.5) lib/ecto/repo/schema.ex:685: Ecto.Repo.Schema.constraints_to_errors/3
(ecto 3.4.5) lib/ecto/repo/schema.ex:666: Ecto.Repo.Schema.apply/4
(ecto 3.4.5) lib/ecto/repo/schema.ex:263: anonymous fn/15 in Ecto.Repo.Schema.do_insert/4
(rocketship 0.1.0) lib/rocketship_web/controllers/parent_organization_user_controller.ex:21: RocketshipWeb.ParentOrganizationUserController.create/2
(rocketship 0.1.0) lib/rocketship_web/controllers/parent_organization_user_controller.ex:1: RocketshipWeb.ParentOrganizationUserController.action/2
(rocketship 0.1.0) lib/rocketship_web/controllers/parent_organization_user_controller.ex:1: RocketshipWeb.ParentOrganizationUserController.phoenix_controller_pipeline/2
CONTROLLER
def create(conn, %{"parent_organization_user" => parent_organization_user_params, "parent_organization_id" => parent_organization_id}) do
parent_organization_user_params = Map.put(parent_organization_user_params, "parent_organization_id", parent_organization_id)
case Organizations.create_parent_organization_user(parent_organization_user_params) do
{:ok, parent_organization_user} ->
conn
|> put_flash(:info, "Parent organization user created successfully.")
|> redirect(to: Routes.parent_organization_user_path(conn, :index, parent_organization_id))
{:error, %Ecto.Changeset{} = changeset} ->
render(conn, "new.html", changeset: changeset)
end
end
SCHEMA
defmodule Rocketship.Organizations.ParentOrganizationUser do
use Ecto.Schema
import Ecto.Changeset
schema "parent_organizations_users" do
field :role, :string
belongs_to :user, Rocketship.Accounts.User
belongs_to :parent_organization, Rocketship.Organizations.ParentOrganization
timestamps()
end
@doc false
def changeset(parent_organization_user, attrs) do
parent_organization_user
|> cast(attrs, [:role, :parent_organization_id, :user_id])
|> validate_required([:role, :parent_organization_id, :user_id])
end
end