@@ -448,11 +448,12 @@ def errors
448448 end
449449
450450 class ValidationErrors < Error
451- attr_reader :error_messages , :error_metadata , :resource_relationships
451+ attr_reader :error_messages , :error_metadata , :resource_relationships , :resource_class
452452
453453 def initialize ( resource , error_object_overrides = { } )
454454 @error_messages = resource . model_error_messages
455455 @error_metadata = resource . validation_error_metadata
456+ @resource_class = resource . class
456457 @resource_relationships = resource . class . _relationships . keys
457458 @key_formatter = JSONAPI . configuration . key_formatter
458459 super ( error_object_overrides )
@@ -474,7 +475,7 @@ def json_api_error(attr_key, message)
474475 create_error_object ( code : JSONAPI ::VALIDATION_ERROR ,
475476 status : :unprocessable_entity ,
476477 title : message ,
477- detail : " #{ format_key ( attr_key ) } - #{ message } " ,
478+ detail : detail ( attr_key , message ) ,
478479 source : { pointer : pointer ( attr_key ) } ,
479480 meta : metadata_for ( attr_key , message ) )
480481 end
@@ -484,14 +485,23 @@ def metadata_for(attr_key, message)
484485 error_metadata [ attr_key ] ? error_metadata [ attr_key ] [ message ] : nil
485486 end
486487
488+ def detail ( attr_key , message )
489+ general_error? ( attr_key ) ? message : "#{ format_key ( attr_key ) } - #{ message } "
490+ end
491+
487492 def pointer ( attr_or_relationship_name )
493+ return '/data' if general_error? ( attr_or_relationship_name )
488494 formatted_attr_or_relationship_name = format_key ( attr_or_relationship_name )
489495 if resource_relationships . include? ( attr_or_relationship_name )
490496 "/data/relationships/#{ formatted_attr_or_relationship_name } "
491497 else
492498 "/data/attributes/#{ formatted_attr_or_relationship_name } "
493499 end
494500 end
501+
502+ def general_error? ( attr_key )
503+ attr_key . to_sym == :base && !resource_class . _has_attribute? ( attr_key )
504+ end
495505 end
496506
497507 class SaveFailed < Error
0 commit comments