formex_ecto v0.1.9 Formex.Ecto.Type behaviour View Source
Module that must be used in form types that uses Ecto.
Installation
Just add use Formex.Ecto.Type
Example
defmodule App.ArticleType do
use Formex.Type
use Formex.Ecto.Type
def build_form(form) do
form
|> add(:title, :text_input, label: "Title")
# ...
end
# optional
def fields_casted_manually(_form) do
# do some fields will be casted later?
[]
end
# optional
def changeset_after_create_callback(changeset, form) do
# do something with changeset. If you change some data here, it will be saved to database
# since Formex 0.5, you cannot add errors to a changeset
changeset
end
If you want to add errors to a changeset, see
Formex.Ecto.ChangesetValidator.changeset_validation/2
Example with Arc.Ecto
defmodule App.ArticleType do
# ...
def build_form(form) do
form
|> add(:image, :file_input, label: "Image")
# ...
end
# Arc.Ecto.cast_attachments doesn't work if we used Ecto.Changeset.cast/3 on :image
# (Formex.Ecto.Changest does this automatically), therefore we must indicate that this field
# will be casted manually
def fields_casted_manually(_form) do
[:image]
end
# manually use `Arc.Ecto.cast_attachment/3`
def changeset_after_create_callback(changeset, _form) do
changeset
|> cast_attachments(changeset.params, [:image])
end
end
Link to this section Summary
Callbacks
Callback that will be called after changeset creation
Do you have some fields that should be casted manually?
Link to this section Callbacks
Link to this callback
changeset_after_create_callback(changeset, form)
View Source
changeset_after_create_callback(changeset :: Ecto.Changeset.t, form :: Formex.Form.t) :: Ecto.Changeset.t
Callback that will be called after changeset creation.
In this callback you can modify changeset.
Since Formex 0.5, you cannot add errors to changeset. If you want to do so, see
Formex.Ecto.ChangesetValidator.changeset_validation/2
Link to this callback
fields_casted_manually(form)
View Source
fields_casted_manually(form :: Formex.Form.t) :: List.t
Do you have some fields that should be casted manually?
All fields listed here will not be
casted automatically by Ecto.Changeset.cast/3
function. You must cast them in the
changeset_after_create_callback/2
.