JavaScriptを有効にしてください

【Elixir】Ectoで個別にエラーを追加する方法

 ·  ☕ 1 分で読めます

【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

参考

共有

こぴぺたん
著者
こぴぺたん
Copy & Paste Engineer