@@ -465,11 +465,12 @@ def errors
465465 end
466466
467467 class ValidationErrors < Error
468- attr_reader :error_messages , :error_metadata , :resource_relationships
468+ attr_reader :error_messages , :error_metadata , :resource_relationships , :resource_class
469469
470470 def initialize ( resource , error_object_overrides = { } )
471471 @error_messages = resource . model_error_messages
472472 @error_metadata = resource . validation_error_metadata
473+ @resource_class = resource . class
473474 @resource_relationships = resource . class . _relationships . keys
474475 @key_formatter = JSONAPI . configuration . key_formatter
475476 super ( error_object_overrides )
@@ -491,7 +492,7 @@ def json_api_error(attr_key, message)
491492 create_error_object ( code : JSONAPI ::VALIDATION_ERROR ,
492493 status : :unprocessable_entity ,
493494 title : message ,
494- detail : " #{ format_key ( attr_key ) } - #{ message } " ,
495+ detail : detail ( attr_key , message ) ,
495496 source : { pointer : pointer ( attr_key ) } ,
496497 meta : metadata_for ( attr_key , message ) )
497498 end
@@ -501,14 +502,23 @@ def metadata_for(attr_key, message)
501502 error_metadata [ attr_key ] ? error_metadata [ attr_key ] [ message ] : nil
502503 end
503504
505+ def detail ( attr_key , message )
506+ general_error? ( attr_key ) ? message : "#{ format_key ( attr_key ) } - #{ message } "
507+ end
508+
504509 def pointer ( attr_or_relationship_name )
510+ return '/data' if general_error? ( attr_or_relationship_name )
505511 formatted_attr_or_relationship_name = format_key ( attr_or_relationship_name )
506512 if resource_relationships . include? ( attr_or_relationship_name )
507513 "/data/relationships/#{ formatted_attr_or_relationship_name } "
508514 else
509515 "/data/attributes/#{ formatted_attr_or_relationship_name } "
510516 end
511517 end
518+
519+ def general_error? ( attr_key )
520+ attr_key . to_sym == :base && !resource_class . _has_attribute? ( attr_key )
521+ end
512522 end
513523
514524 class SaveFailed < Error
0 commit comments