** (FunctionClauseError) no function clause matching in Ecto.Repo.Schema.do_insert_all/6

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 :slight_smile:

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

I suspect this should be:

Repo.insert_all(Vehicles, [record], on_conflict: :nothing)

Since Repo.insert_all/3 takes a list for the data.

Yup, that did it! Thanks so much :slight_smile: