Techioz Blog

ドライ検証で nil 値を持つハッシュの配列を許可する方法

概要

これは、ハッシュの配列にnil値を許可しようとしている方法です(私はdry-validations gemを使用しています)

required(:properties).maybe(:array).each(:hash)

これにより、次の例外が発生します。

NoMethodError: undefined method `map' for nil:NilClass
from /Users/svelandiag/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/dry-logic-1.2.0/lib/dry/logic/operations/each.rb:15:in `call'

この場合、nil 値を許可するにはどうすればよいでしょうか?

解決策

まあ、実際には少し時間がかかりましたが、答えはここにあるようです https://dry-rb.org/gems/dry-schema/1.9/basics/macros/#maybe

each でmaybe を使用することはできません。代わりに次のようにする必要があります。

required(:properties).maybe(:array) do
  nil? | each(:hash)
end

私はドライスキーマドキュメント内の「ネストされたデータ」セクションを見ていたため、答えを見つけるのにかなりの時間がかかりました。プロジェクトの貢献者がこれを見ている場合は、説明するために同様のセクションを追加することをお勧めします。おそらく、それぞれはdry-schemaドキュメントの「ネストされたデータ」セクションで互換性がありません https://dry-rb.org/gems/dry-schema/1.9/nested-data/