Custom error messages for array of hashes


#1

Hello, I’ve encountered a problem when attempting to define custom error messages for array of hashes - I can’t figure out the way to define the structure of errors in YAML file to match my schema. My data structure looks as follows:

{
  events: [
    { name: "Some name", number: 1 },
    { name: "Other name", number: 2 },
  ],
}

Schema:

schema = Dry::Validation.Schema do
  configure { config.messages_file = "config/errors.yml" }

  required(:events).each do
    required(:number).filled(:int?)
    required(:name).filled(:str?)
  end
end

config/errors.yml:

en:
  errors:
    rules:
      events:
        rules:
          name:
            key?: 'custom message: Name key is missing'
            filled?: 'custom message: Missing name in events array'

And the schema call schema.call({ events: [{ number: 2 }] }) which results in the following:

{
  :events => {
    0 => {
       :name => [[0] "is missing"]
    }
  }
}

while I would expect it to be my custom error message for name key.

So I nested rules keyword under the events namespace and expected it to treat everything nested below events as objects. But I suspect that it won’t work with arrays anyway. Does anyone have an idea how should the config/errors.yml look like in order for custom error messages be working for objects in a given array? Thank you very much in advance!