我正在使用'葡萄实体','〜> 0.7.1'
我有一个哈希格式:
temp_data = [{sheet_index: 0, other_names: []},{'sheet_index' => 1, 'other_names': ['a']}]
我有以下实体
class Sheet < Grape::Entity
expose :sheet_index, documentation: {type: Integer, desc: "Sheet index"}
expose :other_names, documentation: {type: Array, desc: "Other names"}
end
class Sheets < Grape::Entity
present_collection true
expose :items, as: 'sheet_history', using Entities::Sheet
end
# response from the entities
present temp_data, with: Entities::Sheets
现在我需要确保无论我的 Hash 中的键类型如何,它仍然应该为我提供上述情况的正确输出
expected_response = {"sheet_history" => [{"sheet_index"=>0, "other_names"=>[]}, {"sheet_index"=>1, "other_names"=>["a"]}]}
但我得到的响应格式如下
actual_response = {"sheet_history" => [{"sheet_index"=>0, "other_names"=>[]}, {"sheet_index"=>nil, "other_names"=>nil}]}
所以在实际响应sheet_index
中other_names
,第二个元素的值为 nil,因为它们的键是字符串,而不是符号。(请参阅temp_data
。)
我已经参考了https://github.com/ruby-grape/grape-entity/pull/85来获得上述实现,但如果不使用 HashWithIndifferentAccess 或 OpenStructs 仍然无法使其工作