2009-12-24 2 views
2

Ruby에 Post라는 객체가 있습니다. 게시물을 json으로 변환하고 싶지만 게시물을 게시 한 사용자의 이름도 포함하고 싶습니다. user_name은 Post 객체에 없지만 사용자 ID는입니다. 내가Ruby에서 To_Json 재정의

{name:"My Post", body:"My post data"} 

을 다음 GET, POST 개체에 to_json을하지만 또한에 user_name:"jhonny" 부분도 추가 할 때

은 그래서 효과적으로 원하는이

{name:"My Post", body:"My post data", user_name:"jhonny"} 

같은 것입니다. 해시를 만들 수 있고 해시에서 to_json을 수행 할 수 있음을 알고 있지만 게시 할 많은 속성이 있으므로 수동으로 모든 게시 값의 해시를 만들고 싶지 않습니다. 차라리 hash 해시 함수를 추가하여 해시에 추가 속성을 추가 한 다음 json을 호출하십시오.

루비 클래스에 대한 빠른 해시 객체를 만드는 방법이 있습니까? 어떤 아이디어라도 환영 할 것입니다.

my_post.hash.merge{:user_name => "jhonny"}.to_json 

건배 같은

뭔가.

+0

뭔가를해야합니다 이 작동하지만 나쁜 해킹입니다. 나는이 권리를 얻는 더 깨끗한 방법을 원한다. – Priyank

+0

나쁜 해킹이라고 생각하지 않습니다. 게시물을 json으로 변경 한 다음 해시로 다시 변환 한 다음 사용자 이름을 병합 한 다음 전체 해시를 json으로 다시 변환합니다. 그것은 어떤 시나리오에서 실패하면 나쁜 해킹이었을 것이다. – Waseem

답변

4

그 다음 바로 다음 해결 방법 중 하나를 시도 작동하지 않은 경우 귀하의 질문에 대답하는 것은 어쨌든이

my_post.attributes.merge{:user_name => "jhonny"}.to_json 

과 같이해야한다 :

def to_json 
    ActiveRecord::JSON.decode(super).merge({:user_name => user.user_name}).to_json 
end 
:

당신의 Post 모델이 추가

Post 모델에 user_name 메서드를 추가하는 다른 해결책은

입니다. 다음과 같이
def user_name 
    user.user_name 
end 

그런 to_json를 사용

my_post.to_json(:methods => :username) 
+0

첫 번째 제안은 잘 작동하며 잘 보입니다. 감사 – Priyank

0

당신의 포스트 모델은 액티브 모델 인 경우는 허용합니다 제외 : 포함 : 직렬화 메소드에만 매개 변수를 #to_json이 포함되어 있습니다. 세부 사항 및 예제는 here in the AR documentation을 참조하십시오. . to_json :

은 기본적으로 당신은 내가 액티브 :: JSON.decode (my_post.to_json) .merge ({_ 이름 => "조니"}) 등의 방법을 발견했다

my_post.to_json(:include => { :user => { :only => :user_name } })