2017-09-06 5 views
0

나는레일즈에서 루비의 as_json 응답을 수정하는 방법은 무엇입니까?

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

하지만 내 원하는 응답이

{ :event_type => "Chat" } 

입니다 출력 어떻게 할 수있는이 나에게주고 이벤트라는 모델, 이벤트 유형

와 차례로 has_one 협회
event = Event.last 

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

이 이걸 달성 할까?

+1

'as_json'을 다시 정의하거나 자신 만의 인스턴스 메소드를 만들 수 있습니다. – Ilya

답변

0

이벤트에 인스턴스 메서드를 만들고 :methods 키를 사용하여 직렬화 된 응답에 포함 할 수 있습니다 (as_json 설명서 참조).

그러나 연관 has_one이 당신을 위해 생성했기 때문에 event_type 메서드를 생성하고 싶지 않습니다. 어쩌면 당신은 event_method_name 할 수 있을까요? 원하는 응답을 정확하게 얻어야하는 경우 JBuilder 또는 Active Model과 같은 것으로 나타납니다. 일련 번호를 사용하면 출력을 더 잘 제어 할 수 있습니다.

0

event.rb에서이 작업을 수행 할 수 있습니다.

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

또한 생성하고 다른 곳 전체 개체를해야 할 경우에 메소드를 오버라이드 피하기 위해 새로운 방법을 호출하는 것이 좋습니다.

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