グレープ (0.14.0) とグレープ エンティティ (0.5.0) を使用して、Rails (4.2.5) アプリ内で XML API を作成しています。Grape::Entity クラス内で明示的なルート要素を指定すると、XML 応答が不要なルート要素にラップされます<hash>
。どうすればそれを取り除くことができますか?
サンプルコード
# app/models/partner.rb
class Partner < ActiveRecord::Base
# company :string
# name :string
# secret :string
end
# app/api/partners.rb
class Partners < Grape::API
version 'v1', using: :path
prefix :api
format :xml
resource :partners do
get do
present Partner.all, with: PartnerEntity
end
end
end
# app/api/partner_entity.rb
class PartnerEntity < Grape::Entity
root 'partners', 'partner'
expose :company
expose :name
expose :id
end
# Create a partner
Partner.create!(name: 'A Name', company: 'A Company', secret: 'A secret')
結果
# GET /api/v1/partners.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<hash>
<partners type="array">
<partner>
<company>A Company</company>
<name>A Name</name>
<id type="integer">1</id>
</partner>
</partners>
</hash>
PartnerEntity にルートがない結果
# GET /api/v1/partners.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<partner-entities type="array">
<partner-entity>
<company>A Company</company>
<name>A Name</name>
<id type="integer">2</id>
</partner-entity>
</partner-entities>
ルート要素に明示的に名前を付ける必要があるため、ルートなしではできません。