【Elixir】Ectoで個別にエラーを追加する方法
ElixirのEctoで個別にエラーを追加する方法。
ちょっと面倒な時にやる僕が個人的にやっている方法。
確認環境
- Elixir 1.14.2
- Phoenix 1.6.3
Ectoスキーマの準備
まず、Ectoスキーマを定義します。この例では具体的なフィールドは定義しませんが、必要に応じて追加してください。
1
2
3
4
5
6
7
8
| defmodule Demo.Param do
use Ecto.Schema
import Ecto.Changeset
embedded_schema do
# 実際のフィールド定義をここに記述
end
end
|
エラーメッセージの追加
次に、特定の条件が満たされたときにエラーメッセージを追加します。これは、Ecto.Changeset.add_error/3
関数を使用して行われます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| defmodule DemoWeb.Demo.Index do
use DemoWeb, :live_view
@impl true
def mount(params, session, socket) do
{
:ok,
socket
|> assign(
:changeset,
Demo.Param.changeset(%Demo.Param{}, %{})
)
}
end
# バリデーション
@impl true
def handle_event("bulk-send", %{"param" => %{"test" => test}}, socket) do
changeset = Demo.Schema.changeset(%Demo.Schema{}, %{})
# エラー条件
changeset =
if length(bulk_plans) > 0 do
Ecto.Changeset.add_error(changeset, :message, "エラー")
else
changeset
end
# Actionの変更
changeset = %{changeset | action: :validate}
{:noreply,
socket |> assign(:send_changeset, changeset)}
end
end
|
参考