ドライ検証で 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/