Hi,
I’m trying to use Ecto.Enum to store what days a given object is valid on. I have the following code:
defmodule Test do
use Ecto.Schema
import Ecto.Changeset
schema "discount_code" do
field(:days, Ecto.Enum, values: ~W(Monday Tuesday Wednesday Thursday Friday Saturday Sunday)a)
end
def create(attrs) do
changeset(%__MODULE__{}, attrs)
end
def changeset(%__MODULE__{} = test, attrs) do
test
|> cast(attrs, [:days])
end
end
I’ve tried various attributes to feed into the create function, including:
%{days: [:Monday :Tuesday :Wednesday]} |> Test.create()
%{days: ["Monday", "Tuesday", "Wednesday"]} |> Test.create()
%{days: "Monday, Tuesday, Wednesday"%} |> Test.create()
however when I try I get:
%{days: [:Monday]} |> Test.create()
#Ecto.Changeset<
action: nil,
changes: %{},
errors: [
days: {"is invalid",
[
type: {:parameterized, Ecto.Enum,
%{
on_dump: %{
Friday: "Friday",
Monday: "Monday",
Saturday: "Saturday",
Sunday: "Sunday",
Thursday: "Thursday",
Tuesday: "Tuesday",
Wednesday: "Wednesday"
},
on_load: %{
"Friday" => :Friday,
"Monday" => :Monday,
"Saturday" => :Saturday,
"Sunday" => :Sunday,
"Thursday" => :Thursday,
"Tuesday" => :Tuesday,
"Wednesday" => :Wednesday
},
values: [:Monday, :Tuesday, :Wednesday, :Thursday, :Friday, :Saturday,
:Sunday]
}},
validation: :cast
]}
],
data: #Test<>,
valid?: false
>
What am I doing wrong? What format should these params be?
Thanks in advance