grape-entityのexposeが入れ子している場合とusingを使用している場合のhashの渡し方法


概要

grape-entityで、exposeが入れ子している場合とusingを使用している場合のhashの渡し方が異なるのでまとめました。


exposeが入れ子している場合の渡し方

下記のUserEntityを例にhashの渡し方の失敗例と成功例を示します。

class UserEntity < Grape::Entity

expose :name
expose :address do
expose :prefecture
end
end

puts UserEntity.new({name: 'iwanaga', address: {prefecture: 'tokyo' }}).serializable_hash # 失敗例 {:name=>"iwanaga", :address=>{:prefecture=>nil}}
puts UserEntity.new({name: 'iwanaga', prefecture: 'tokyo'}).serializable_hash # 成功例 {:name=>"iwanaga", :address=>{:prefecture=>"tokyo"}}

ポイントは、exposeするキーをフラットなHashで渡すことです。


usingを使用している場合の渡し方

こちらもUserEntityを例に失敗例と成功例を示します。

class AddressEntity < Grape::Entity

expose :prefecture
end

class UserEntity < Grape::Entity
expose :name
expose :address, using: AddressEntity
end

puts UserEntity.new({name: 'iwanaga', prefecture: 'Tokyo'}).serializable_hash # 失敗例 {:name=>"iwanaga", :address=>nil}
puts UserEntity.new({name: 'iwanaga', address: {prefecture: 'tokyo' }}).serializable_hash # 成功例 {:name=>"iwanaga", :address=>{:prefecture=>"tokyo"}}

ポイントは、exposeするキーを入れ子で渡すことです。


バージョン


  • ruby 2.5.1p57

  • grape-entity 0.7.1