2017-09-06 2 views
0

J'ai un modèle appelé l'événement, qui à son tour association has_one avec EventTypeComment modifier la reponse de as_json dans ruby ​​sur rails?

event = Event.last 

event.as_json(include: {event_type: {only: :name}}, only: :event_type) 

Ce me donne la sortie

{ :event_type=> { "name"=>"Chat" } } 

Mais ma réponse souhaitée est

{ :event_type => "Chat" } 

Comment puis-je atteindre cet?

+1

Vous pouvez redéfinir 'as_json' ou créer votre propre méthode d'instance – Ilya

Répondre

0

Vous pouvez créer une méthode d'instance sur l'événement et l'inclure dans la réponse sérialisée à l'aide de la clé :methods (voir la documentation de as_json).

Mais vous ne voulez pas créer une méthode event_type, car l'association has_one en a créé une pour vous. Peut-être que vous pouvez faire event_method_name? Si vous devez obtenir exactement la réponse que vous vouliez, il semblerait que quelque chose comme JBuilder ou Active Model Sérialiseurs vous donnera un meilleur contrôle sur la sortie.

0

Vous pouvez le faire dans event.rb.

def as_json 
    options = {event_type: event_type[:name]} 
    super 
end 

Vous pouvez également envisager de créer et d'appeler une nouvelle méthode pour éviter redéfinissant la méthode dans le cas où vous avez besoin de l'objet complet ailleurs.

def event_type_as_json 
    {event_type: event_type[:name]}.as_json 
end