Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- defmodule MySchema do
- use Ecto.Schema
- import Ecto.Changeset
- @type t :: %__MODULE__{}
- schema "my_schemas" do
- field(:name, :string)
- embeds_one(:permissions, MembershipPermissions,
- primary_key: false,
- on_replace: :update
- ) do
- field(:can_do_stuff, :boolean, default: true)
- end
- timestamps(type: :utc_datetime)
- end
- def changeset(schema, attrs) do
- schema
- |> cast(attrs, [:name])
- |> set_default_permissions()
- |> cast_embed(:permissions, with: &permissions_changeset/2, required: true)
- end
- def set_default_permissions(changeset) do
- case get_field(changeset, :permissions) do
- nil ->
- put_embed(changeset, :permissions, %{})
- _ ->
- changeset
- end
- end
- def permissions_changeset(schema, params) do
- schema
- |> cast(params, [:can_do_stuff])
- |> validate_required([:can_do_stuff])
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement