2017-11-06 2 views
0

Ich habe meine eigene Objekterstellungslogik implementiert, indem ich die create-Aktion in einem JSONAPI :: ResourceController-Controller überschrieben habe.Wie Rendern einer Jsonapi-Ressourcen-Antwort in einer benutzerdefinierten Controller-Aktion?

Nach erfolgreicher Erstellung möchte ich die erstellte Objektdarstellung anzeigen.

Wie Rendern dieser automatisch generierten JSON-API-Antwort mit dem Jsonapi-Ressourcen-Juwel?

Der Aufruf der Super-Methode löst auch die Standard-Ressourcenerstellungslogik aus, was für mich nicht funktioniert.

class Api::V1::TransactionsController < JSONAPI::ResourceController 
    def create 
    @transaction = Transaction.create_from_api_request(request.headers, params) 

    # render automatic generated JSON API response (object representation) 
    end 
end 

Antwort

0
render json: JSON.pretty_generate(JSON.parse @transaction)
0
def render_json 
    result = 
    begin 
     block_given? ? { success: true, data: yield } : { success: true } 
    rescue => e 
     json_error_response(e) 
    end 

    render json: result.to_json 
end 

def json_error_response(e) 
    Rails.logger.error(e.message) 

    response = { success: false, errors: e.message } 

    render json: response.to_json 
end 

render_json { values } 
+0

Dieses eine JSON-Antwort rendert , aber es ist einfach JSON. Es entspricht nicht dem JSON-API-Standard. Das jsonapi-Ressourcen-Juwel generiert automatisch umfangreiche JSON-API-Responses (mit Links, Attributen und Beziehungen). – Laugslander

+0

Oh sorry ich habe die Frage missverstanden, ich kenne dieses Juwel nicht –

0

Man könnte so etwas tun:

class UsersController < JSONAPI::ResourceController 
    def create 
    user = create_user_from(request_params) 

    render json: serialize_user(user) 
    end 

    def serialize_user(user) 
    JSONAPI::ResourceSerializer 
      .new(UserResource) 
      .serialize_to_hash(UserResource.new(user, nil)) 
    end 
end 

diese Weise können Sie eine JSON-Antwort erhalten wird, die mit Jjsonapi Standards kompatibel ist

Verwandte Themen