2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Rails]dry_validationでドライなバリデーションを構築

Posted at

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で使うものを全て渡すようにします。
終わりです。

なんか記事もドライになったな、、、

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?