【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
|
このようにバリデーションが実装できます。