JavaScriptを有効にしてください

【Elixir】カスタムバリデーションを作ってみる

 ·  ☕ 1 分で読めます

【Elixir】カスタムバリデーションを作ってみる

Elixir 独自のバリデーション、カスタムバリデーションを作ってみる

カスタムバリデーション

バリデーション用ファイルの作成
changeset:username が4文字未満もしくは15文字以上でエラーにしています。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
defmodule UserValidator do
  def validate_username(changeset) do
    # チェンジセットから :username を取得する
    username = get_field(changeset, :username)

    # 4文字未満 || 15文字以上でエラー
    if String.length(username) < 4 || String.length(username) > 15 do
      # エラー
      add_error(changeset, :username, "Username must be between 4 and 15 characters"),
    else
      # チェンジセットをそのまま返す
      changeset
    end
  end
end


Model側で実装します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
defmodule User do
  use Ecto.Schema

  schema "users" do
    field :email, :string
    field :username, :string
    field :age, :integer
  end

  @doc false
  def changeset(user, params) do
    user
    |> cast(params, [:email, :username, :age])
    # カスタムバリデーションを実行する
    |> UserValidator.validate_username
    |> validate_format(:email, ~r/@/)
  end

end

このようにバリデーションが実装できます。

共有

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