The Repo.insert_all(SCHEMA, MAP(S), OPTS)
pattern has been my go to without any issue until now. Any assistance disambiguating the error message below is greatly appreciated
defmodule FastCarsDB.Vehicles do
use Ecto.Schema
import Ecto.Changeset
schema "vehicles" do
field :make, :string, null: false
field :color, :string, null: false
field :mileage, :float, null: false
timestamps(type: :utc_datetime)
end
def changeset(vehicles, params \\ %{}) do
vehicles
|> Ecto.Changeset.cast(params, [:make, :color, :mileage])
|> validate_required([:make, :color, :mileage])
end
end
defmodule Foo do
alias FastCarsDB.{Repo, Vehicles}
def update_db do
record =
%{
color: "Red",
make: "Mclaren",
mileage: 15641.469,
inserted_at: DateTime.truncate(DateTime.utc_now, :second),
updated_at: DateTime.truncate(DateTime.utc_now, :second)
}
Repo.insert_all(Vehicles, record, on_conflict: :nothing)
end
end
Error Message:
iex(1)> Foo.update_db
** (FunctionClauseError) no function clause matching in Ecto.Repo.Schema.do_insert_all/6
The following arguments were given to Ecto.Repo.Schema.do_insert_all/6:
# 1
FastCarsDB.Repo
# 2
FastCarsDB.Vehicles
# 3
nil
# 4
"vehicles"
# 5
%{
color: "Red",
make: "Mclaren",
mileage: 15641.469,
inserted_at: ~U[2020-06-28 22:41:23Z],
updated_at: ~U[2020-06-28 22:41:23Z]
}
# 6
[on_conflict: :nothing]
Attempted function clauses (showing 2 out of 2):
defp do_insert_all(_name, _schema, _prefix, _source, [], opts)
defp do_insert_all(name, schema, prefix, source, rows, opts) when is_list(rows)
(ecto 3.4.5) lib/ecto/repo/schema.ex:26: Ecto.Repo.Schema.do_insert_all/6
(elixir 1.10.3) lib/enum.ex:1396: Enum."-map/2-lists^map/1-0-"/2
(elixir 1.10.3) lib/enum.ex:1396: Enum."-map/2-lists^map/1-0-"/2