2011-03-13 2 views
0

레일 3에서 API를 개발 중이며 다음과 같은 문제점이 있습니다. 사용자는 전화, 이메일, 주소, 웹 사이트 및 직업과 같은 여러 가지 "리소스"를 갖게됩니다.레일스 3에서 동일한 API 호출로 여러 항목 제공

같은 호출에서 모든 사용자 "항목"을 얻는 API의 리소스를 구축하고 싶습니다. 이것이 가능한가? 어떻게 할 수 있습니까?

@user = User.find(params[:id]) 

    @phones = @user.phones.where(:privacy => nil) 
    @emails = @user.emails.where(:privacy => nil) 
    @websites = @user.websites.where(:privacy => nil) 
    @addresses = @user.addresses.where(:privacy => nil) 
    @occupations = @user.occupations.where(:privacy => nil) 

    respond_to do |format| 

     format.html { render :text => 'Use either JSON or XML' } 
     format.json { render :json => {@phones,@emails}, :only => [:firstname, :lastname, :nickname, :email, :bio] } 
     format.xml { render :xml => @phones, :only => [:firstname, :lastname, :nickname, :email, :bio] } 

    end 

답변

0

이러한 데이터를 단일 클래스로 유지하기 위해 별도의 모델 (개체) (활성 레코드 제외)을 사용하는 것이 좋습니다.

예 :

class APIUser 

    attr_accessor : name, phone, web_site etc.. 

end 

가 나는 위의 사용자 모델에 모든 데이터를 공급하고 서비스로 노출됩니다. 내가 볼 수 있듯이 세부 사항을보다 잘 제어 할 수 있습니다. 그것이 의미하는 바는 API의 경우 객체의 개별 레이어를 가지고 컨트롤러를 통해 노출시킬 수 있다는 것입니다.

그런 식으로 API 데이터를 변경하려는 경우 API 개체에 대해 걱정할 필요가 있습니다. 와 같은 것은 OR 모델

환호

사 미라

+0

좋아, 들려오는 것처럼 들리 겠어. 하지만 내가 시도하는 방식으로 가능하지 않니? 한 번에 모든 결과를 제공하도록 내 코드를 수정하려면 어떻게해야합니까? –

0

신청을하면 더 나은 출력으로 자신의 JSON 또는 XML을 구축 할 수 있습니다.

respond_to do |format| 
    format.html # index.html.erb 
    format.xml # index.xml.builder 
    format.json render :partial => "show.json" 
end 
관련 문제