SinatraとDataMapperを使用してRESTfulAPIを開発しています。モデルが検証に失敗した場合、エラーが発生したフィールドを示すためにJSONを返したいと思います。DataMapperは、タイプのモデルに「errors」属性を追加しますDataMapper::Validations::ValidationErrors
。この属性のJSON表現を返したいです。
これが単一のファイルの例です(Ruby / Sinatra / DataMapperが大好きです!):
require 'sinatra'
require 'data_mapper'
require 'json'
class Person
include DataMapper::Resource
property :id, Serial
property :first_name, String, :required => true
property :middle_name, String
property :last_name, String, :required => true
end
DataMapper.setup :default, 'sqlite::memory:'
DataMapper.auto_migrate!
get '/person' do
person = Person.new :first_name => 'Dave'
if person.save
person.to_json
else
# person.errors - what to do with this?
{ :errors => [:last_name => ['Last name must not be blank']] }.to_json
end
end
Sinatra::Application.run!
私の実際のアプリでは、POSTまたはPUTを処理していますが、問題を再現しやすくするために、GETを使用して、またはブラウザーを使用できるようにしています。curl http://example.com:4567/person
つまり、私が持っているperson.errors
のは、私が探しているJSON出力は、ハッシュによって生成されたもののようなものです。
{"errors":{"last_name":["Last name must not be blank"]}}
必要なJSON形式にするにはどうすればよいDataMapper::Validations::ValidationErrors
ですか?