Пользователь 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]

читать атрибут.

Другие вопросы по тегам