2011-03-25 8 views
9

respond_to JSON 해시 내에 가상 속성/메소드를 포함하려고합니다.respond_with 해시에 가상 속성 포함하기

모델 (employee.rb)

attr_reader :my_method 

def my_method 
    return "foobar" 
end 

감사관 (employees_controller.rb는)

respond_to :json 

def index 
    @employees = Employee.all 
    respond_with(:data => @employees, :total => Employee.all.count) 
end 

내가 대한 JSON 루트로 "데이터"가 중요하다 "직원"의 컬렉션 및 해시 내에 "전체"를 포함 할 수 있습니다. 이것은 잘 작동하고 모든 직원과 총 가치에 대한 훌륭한 JSON 결과를 반환합니다.

My qustion : JSON 응답의 직원 해시 내에 각 직원에 대해 가상 속성 "my_method"를 포함하려면 어떻게해야합니까?

시간 내 주셔서 감사합니다.

답변

14

이 나를 위해 일 것입니다. 올바른 방향으로 날을 가리키는위한 cmason에 대한

Employee.rb는

def as_json(options={}) 
    super.as_json(options).merge({:my_method => my_method}) 
end 

감사합니다. 다른 해결책도 환영합니다.

+0

감사를 사용할 수 있습니다. 내가 뭘 찾고 있었는지 !!!! – Arkan

+2

구문 오류가 있습니다. 그것은 : super.as_json (options) .merge ({: my_method => my_method}) – jBilbo

+0

고 .. 고마워! – primary0

1

트릭을해야 할 모델의 as_json을 덮어 쓰기 :

def as_json(options={}) 
    { :methods=>[:my_method] }.merge(options) 
end 
3

에서 레일은 3 일이

@yourmodel.to_json(methods: ['virtual_attr1', 'virtual_attr2']