2014-03-25 11 views
0

안녕하세요, stackoverflow 사람들, 레일 프로젝트를 아무 문제없이 실행할 수 있도록 레일즈 프로젝트를 다운 그레이드하고 싶습니다. 이전 버전의 레일에서 작동했지만 사무실은이 버전을 사용하고 싶지 않습니다. 이 특정 행을 다시 작성하는 데 문제가 있습니다.레일 프로젝트를 Ruby 1.9.3으로 다운 그레이드 | 재미있는 .to_json 문제

@results = @sessions.to_json(:include => [:orientations, :subtopics, :data_files, :participants, :formats, :comments => {:include => [:user => {:only => [:id, :name]}]}]) 

@sessions는 물론 결과 목록입니다. 이전 버전의 레일에서도 실행할 수있는 대안을 어떻게 쓸 수 있는지 아는 사람이 있습니까? 사전에

감사

종류가 여기에

+0

오류가 있습니까? 그렇다면 질문에서 같은 것을 나눌 수 있습니까? –

+0

=> 및]에서 구문 오류입니다. – dejakob

답변

1

에 관하여 당신이가는 :

애니 to_json이 객체에서 호출, as_json는 데이터 구조를 만들기 위해 호출 한 다음 해당 해시는로 인코딩됩니다 ActiveSupport :: json.encode를 사용하는 JSON 문자열입니다. 이 문제는 모든 유형 (객체, 숫자, 날짜, 문자열 등)에서 발생합니다 (active_support/json 참조).

ActiveRecord 개체도 같은 방식으로 동작합니다. 모든 모델의 속성을 포함하는 해시를 만드는 기본 as_json 구현이 있습니다. 모델에서 as_json을 재정 의하여 원하는 JSON 구조를 만들어야합니다. as_json은 이전의 to_json과 마찬가지로 속성 해설을 포함 할 수있는 옵션 해시를 사용합니다.

render :json => @user 

을 그리고 당신은 유달리 아무것도 할 필요가있는 경우, 옵션을 전달 as_json 전화 : 하나 개의 모델을 표시

def as_json(options={}) 
    super(:only => [:email, :avatar], :include =>[:addresses]) 
end 

컨트롤러 코드는 항상 다음과 같아야합니다.

render :json => { :success => true, 
    :user => @user.as_json(:only => [:email]) } 

이야기의 교훈은 다음과 같습니다 컨트롤러에서, 당신을 위해 그렇게 렌더링, 직접 to_json을 허용 호출하지 않습니다. JSON 출력을 조정해야하는 경우 모델에서 as_json을 무시하거나 직접 as_json으로 전화하십시오.

as_json을 사용하도록 코드를 수정하십시오. Rails 3 or Ruby 1.9.3으로 마이그레이션 할 때 걱정할 점이 하나 줄어 듭니다.