formex_ecto v0.1.7 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.