2016-05-25 10 views
0

Ich fragte mich, ob Grape Entity würde für das Rendern von Arrays von Hashes arbeiten, dachte ich erinnerte mich, es funktioniert, aber irgendwie kann ich es nicht zur Arbeit bekommen, mache ich einen offensichtlichen Fehler? Hier ist meine Entity:Benutzer Grape Entity mit Arrays

class V1::Entities::Searchresult < Grape::Entity 
    expose :_type, as: :type 
    expose :_id, as: :id 
    expose :_score, as: :score 
    expose :highlight 
end 

In meinem API nenne ich die Wiedergabe wie folgt aus:

present result['hits']['hits'], with: V1::Entities::Searchresult, :params => params 

das 'Ergebnis [' Treffer '] [' Treffer ']' wird mit 10-Hashes gefüllt, die enthalten Daten. Die Daten sind vorhanden. Jedoch, wenn ich auf das Ergebnis sehe ich bekommen:

[ 
    { 
    "type": null, 
    "id": null, 
    "score": null, 
    "highlight": null 
    }, 
    { 
    "type": null, 
    "id": null, 
    "score": null, 
    "highlight": null 
    }, 
    ...... 

Bin ich etwas falsch zu machen, oder ist dies einfach nicht möglich. Ich kann nicht scheinen, irgendwelche Dokumentation auf dem Array Toppic auszugraben.

Prost

Tom

Antwort

0

ich den Fehler gefunden, Traube :: Entity :: Delegator :: HashObject schlägt mit Hashes, die String-Schlüssel und nicht die Symbole zu arbeiten. Es kann die Werte nicht extrahieren.

data = [] 
    result['hits']['hits'].each do |item| 
    data << item.symbolize_keys 
    end 

    present data, with: V1::Entities::Searchresult, :params => params 

Diese Problemumgehung gibt das Problem auf. Ich werde auch eine Github Ausgabe für eine Korrektur öffnen, da eine einfache

object[attribute] || object[attribute.to_s] 

würde nur statt, das ganze Problem lösen

mit
object[attribute] 

das Attribut zu lesen.

Verwandte Themen