2011-02-14 2 views
9

소유자 메소드가있는 모델 객체의 배열이 있습니다. 이 메서드는 작업에 전달할 매개 변수가 필요합니다. json에 모델 객체를 직렬화하고 소유자 메소드의 값을 포함해야합니다. 나는 to_json 방법에 매개 변수를 전달 가겠어요 어떻게Rails to_json : 매개 변수가있는 메소드

나는 현재 소유자 방법을 포함하도록

objects.to_json(:methods => :owner) 

를 사용하지만이 매개 변수를 전달하고 있지 않다대로 작동하지 않습니다.

+0

JSON을 어떻게 사용하고 있습니까? #to_json에 매개 변수를 전달할 수없는 이유는 무엇입니까? –

답변

19

가 참고 : 코멘트가 2.3 레일에 적용, 난 당신이 작품 to_json 방식 승 /이 작업을 수행 할 수 있다고 생각하지 않습니다이 w/레일 3.

을 시도, 그래서 당신은 두 가지 옵션이 생각하지 않은 :

1. 'owner'메소드가 to_json 호출 중에 읽는 변수에 올바른 값을 숨기는 메소드를 호출하여 객체를 생성하십시오.

모델의 as_json을 2.Overriding : param_for_owner :

def as_json(options = {}) 
    json = super(options) 
    json['owner'] = owner(options[:param_for_owner]) 
    json 
end 

는 그런 다음 to_json 호출에 바로 전달

objects.to_json(:param_for_owner => 'foo') 

주 당신은 어떻게 당신의 액티브에 따라 달라집니다 당신의 가치를 주입하는 경우 :: Base.include_root_in_json이 구성되었습니다.

+4

정확하게 아름답지는 않지만 작동합니다. –

+0

특정 클래스에 대해이 as_json 재정의 메소드를 사용하지만 매번 'owner'를 포함 할 필요가없는 경우 json [ 'owner'] ... 행 다음에 "if owner [: param_for_owner]"를 추가 할 수 있습니다 선택적으로 만들 수 있습니다. –

+0

괜찮습니다. 메서드에 매개 변수가 필요한 경우 해당 매개 변수에 따라 개체의 JSON 표현이 달라 지므로 사용자 지정 동작이있는 것이 정상입니다. 그렇지 않으면'as_json' 메소드를 호출하는 다른 메소드를 생성 할 수있다. 예 : 'object.as_json_with_owner (owner)' –