defmodule App.Blog.Article do use Ecto.Schema import Ecto.Changeset schema "articles" do field(:author_name, :string) field(:published, :boolean) field(:title, :map) end def changeset(%__MODULE__{} = record, params) do record |> cast(~w(author_name published title)a, params) |> validate_required(~w(author_name title)a) |> validate_change(:title, &validate_nested_french_value/2) end defp validate_nested_french_value(field, %{"fr" => fr}) when fr != "", do: [] defp validate_nested_french_value(field, _) do [{field, "must specify french value"}] end end
defmodule App.Payments.Transaction do use Ecto.Schema import Ecto.Changeset schema "payment_transations" do field(:gateway_response, :map) belongs_to(:order_id, App.Order) end def changeset(%__MODULE__{} = record, params) do record |> cast(~w(order_id gateway_response)a, params) |> validate_required(~w(order_id)a) end end
defmodule App.Blog.Article do use Ecto.Schema import Ecto.Changeset schema "articles" do field(:author_name, :string) field(:published, :boolean) embeds_one(:title, App.Translations.Translated) end def changeset(%__MODULE__{} = record, params) do record |> cast(~w(author_name published)a, params) |> validate_required(~w(author_name)a) |> cast_embed(:title, required: true) end end
defmodule App.Translations.Translated do use Ecto.Schema import Ecto.Changeset embedded_schema do field(:en, :string) field(:fr, :string) end def changeset(%__MODULE__{} = record, params) do record |> cast(~w(en fr)a, params) |> validate_required(~w(fr)a) end end