Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.88 KB | None | 0 0
  1. defmodule MySchema do
  2. use Ecto.Schema
  3.  
  4. import Ecto.Changeset
  5.  
  6. @type t :: %__MODULE__{}
  7.  
  8. schema "my_schemas" do
  9. field(:name, :string)
  10.  
  11. embeds_one(:permissions, MembershipPermissions,
  12. primary_key: false,
  13. on_replace: :update
  14. ) do
  15. field(:can_do_stuff, :boolean, default: true)
  16. end
  17.  
  18. timestamps(type: :utc_datetime)
  19. end
  20.  
  21. def changeset(schema, attrs) do
  22. schema
  23. |> cast(attrs, [:name])
  24. |> set_default_permissions()
  25. |> cast_embed(:permissions, with: &permissions_changeset/2, required: true)
  26. end
  27.  
  28. def set_default_permissions(changeset) do
  29. case get_field(changeset, :permissions) do
  30. nil ->
  31. put_embed(changeset, :permissions, %{})
  32.  
  33. _ ->
  34. changeset
  35. end
  36. end
  37.  
  38. def permissions_changeset(schema, params) do
  39. schema
  40. |> cast(params, [:can_do_stuff])
  41. |> validate_required([:can_do_stuff])
  42. end
  43. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement