dry-validationて?
railsでのバリデーションをdryにやってくれるgemです。
備忘録として残しておきます。
https://dry-rb.org/gems/dry-validation/1.5/schemas/
導入
Gemfile
gem 'dry-validation'
gem 'dry-struct'
設定
class ApplicationContract < Dry::Validation::Contract
config.messages.default_locale = :ja
config.messages.backend = :yaml
config.messages.load_paths << 'config/errors.yml'
end
バリデーションエラー時のメッセージ
キーとバリューはyamlに記載します。
config/errors.yml
ja:
dry_validation:
errors:
str?: '文字列ではない'
int?: '数字ではない'
array?: '配列ではない'
filled?: '空です'
rules:
name:
hogehoge: 'ホゲホゲ'
カラム名:
...
バリデーションルール
class HogeContract < ApplicationContract
params do
required(:name).filled(:string)
optional(:email).filled(:string)
required(:age).maybe(:integer)
end
rule(:name) do
key.failure(:hogehoge) if ~
end
end
required
:パラメータが存在しているかチェック
optional
:パラメータの存在は任意
filled
:型のチェック
maybe
:型のチェック、nilの時は発火しない
ruleでバリデーション対象のカラムを指定し、その中にバリデーションルールを記述します。
呼び出し
HogeContract.new.call(
name: params[:name],
email: params[:email],
age: params[:age]
).errors.to_h
バリデーションルールを記述したクラスを生成し、callで呼び出します。
引数にはparamsで使うものを全て渡すようにします。
終わりです。
なんか記事もドライになったな、、、