Cast_assoc is null?

tl;dr

Just don’t put it into the params / changeset. Treat the params as an opaque data structure.

# in your controller

def create(conn, %{"magnet" => magnet_params}) do
    case Magnets.create_magnet(magnet_params, for: conn.assigns.current_user) do
      {:ok, magnet} ->
        conn
        |> put_flash(:info, "Magnet created successfully.")
        |> redirect(to: magnet_path(conn, :show, magnet))
      {:error, %Ecto.Changeset{} = changeset} ->
        render(conn, "new.html", changeset: changeset)
    end
end

# in your business logic module

def create_magnet(attrs, for: %User{id: user_id}) do
  %Magnet{user_id: user_id}
  |> Magnet.changeset(attrs)
  |> Repo.insert()
end

# in the module where you schema / changesets are defined
def changeset(manget, attrs) do
  magnet
  |> cast(attrs, [:title, :description, :content])
  |> validate_required([:title, :description, :content])
end
1 Like