Пользователь Grape Entity с массивами
Мне было интересно, сработает ли Grape Entity для рендеринга массивов хэшей, я подумал, что я вспомнил, что это сработало, но почему-то я не могу заставить его работать прямо сейчас, я делаю какую-то очевидную ошибку? Вот моя сущность:
class V1::Entities::Searchresult < Grape::Entity
expose :_type, as: :type
expose :_id, as: :id
expose :_score, as: :score
expose :highlight
end
В моем API я называю рендеринг следующим образом:
present result['hits']['hits'], with: V1::Entities::Searchresult, :params => params
'Result[' Hit '][' Hit ']' заполнен 10 хешей, которые содержат данные. Данные присутствуют. Однако когда я смотрю на результат, я получаю:
[
{
"type": null,
"id": null,
"score": null,
"highlight": null
},
{
"type": null,
"id": null,
"score": null,
"highlight": null
},
......
Я делаю что-то не так, или это просто невозможно? Я не могу выкопать какую-либо документацию по массиву toppic.
ура
Том
1 ответ
Я обнаружил ошибку, Grape::Entity::Delegator::HashObject не работает с хешами, которые имеют строковые ключи, а не символы. Он не может извлечь значения.
data = []
result['hits']['hits'].each do |item|
data << item.symbolize_keys
end
present data, with: V1::Entities::Searchresult, :params => params
Этот обходной путь устраняет проблему. Я также открою github Issue для исправления, так как простой
object[attribute] || object[attribute.to_s]
решил бы всю проблему, а не только с помощью
object[attribute]
читать атрибут.