2010-07-28 4 views
0

다음은 간단한 ActiveResource 클래스입니다. 그것은 인스턴스 변수와 어쩌면 몇몇 메소드를 가지고 있지만, 어떤 데이터에 의해서지지되지는 않습니다.이 Ruby 클래스로 간단한 json을 어떻게 만들 수 있습니까?

ruby-1.8.7-p299 > class Box < ActiveResource::Base; 
        attr_accessor :a, :b, :c, :d; 
        end 
=> nil 

의 그것을 채울 보자

ruby-1.8.7-p299 > bx = Box.new; bx.a = 100; bx.b = 200; 
           bx.c = 300; bx.d = 400; 
           bx 
=> #<Box:0xb5841c54 @attributes={}, @b=200, @a=100, 
     @prefix_options={}, @c=300, @d=400> 

를 지금까지 너무 좋아. JSON 모델의 인스턴스 변수를 cherry로 선택하는 방법은 어떻습니까? bc 만 신경 써야하지만 a, d 또는 그 외의 부분은 신경 쓰지 않는다고 가정 해 보겠습니다. 우리는 더 이 'B'또는 'C'라는 만 값 속성없는이 있기 때문에,하지만 작동하지 않습니다

ruby-1.8.7-p299 > bx.to_json({:only => ['b', 'c']}) 
=> "{}" 

. 우리는 어떻게 이런 식으로 끝낼 수 있습니까?

{ "box": { "b": 200, "c": 300 } } 

ActiveResource에서 상속하지 않고도이 기능을 사용할 수 있습니까?

답변

1

AR 개체에서이 페이지와 마찬가지로 to_json에 '메서드'매개 변수 만 사용하면 http://www.gregbenedict.com/2007/11/28/outputting-custom-model-attributes-with-to_json/이됩니다.

비 AR 객체에서 사용자 정의 to_json 메서드를 정의하면 jsonize하려는 변수의 해시를 어셈블 한 다음 to_json으로 만들고 반환 할 수 있습니다. 다음은 (테스트되지 않은) 예제입니다.

def to_json(options = {}) 
    {"box" => {"b" => b, "c" => c}}.to_json(options) 
end 
+0

감사합니다. 두 가지 빠른 것들 : ActiveResource가 아닌 ActiveResource를 사용하고 있습니다. 또한,'methods'가 여기서 작동 할 지 확신하지 못합니다.'bx.to_json (: methods => [: b, : c])'는 모든 것을 포함하는 해시를 생성합니다. 둘째,''b "=> b,"c "=> c, ...'꽤 반복적으로 쓰는 것 아닌가요? JSON-ize에 속성을 지정할 수있는 방법이 있습니까? –

+0

내 리소스가 부족합니다. 죄송합니다. 나는 그것을 놓쳤습니다 : D 당신이 묻는 것에 관해서 : 당신은 JSON 응답에 넣으려는 방법을 표현하기 위해 항상 기호 나 문자열의 목록을 취할 수 있습니다. 내가 찾고있는 것을 더 좋아한다면 그것을 명확하게하기 위해 위의 내 응답을 편집 할 것입니다. – jasonpgignac

관련 문제