복붙노트

[RUBY-ON-RAILS] 개체 관계 및 JSON 렌더링 레일

RUBY-ON-RAILS

개체 관계 및 JSON 렌더링 레일

면책 조항, 나는 거의 레일에 대해 알고있다. 나는 간결하려고합니다. 레일에서 다음과 같은 모델의 관계를 감안할 때 :

class ModelA < ActiveRecord::Base
  belongs_to :ModelB

...

class ModelB < ActiveRecord::Base
    has_many :ModelA

MODELA 컨트롤러의 show 액션을 호출 할 때 반환 된 JSON은 문제의 ObjectA가의 자녀로되어있는 ObjectB의 모든 하위 ObjectAs을 표시해야합니다.

내가 ObjectA의 ID 1, 2, 3 다음 액세스가 포함 된 ObjectB이 그래서 경우 : /modela/1.json

내가 볼 수 :

{
  "modelb": {
    "id": "1",
    "modela": [insert the ModelA JSON for ID's 1, 2 and 3]
  }
}

해결법

  1. ==============================

    1.기본적으로 당신은 단지 위의 예에서 modelb를 나타내는 JSON을 얻을 것이다. 그러나, 당신은 다른 관련 개체를뿐만 아니라 포함하도록 레일을 알 수 있습니다 :

    기본적으로 당신은 단지 위의 예에서 modelb를 나타내는 JSON을 얻을 것이다. 그러나, 당신은 다른 관련 개체를뿐만 아니라 포함하도록 레일을 알 수 있습니다 :

    def export
      @export_data = ModelA.find(params[:id])
      respond_to do |format|
        format.html
        format.json { render :json => @export_data.to_json(:include => :modelb) }
      end
    end
    

    당신이 수출을 표시하지 않으려면 당신은 특정 분야를 제외 그것을 알 수 있습니다 :

    render :json => @export_data.to_json(:include => { :modelb => { :except => [:created_at, updated_at]}})
    

    또는 특정 필드를 포함 :

    render :json => @export_data.to_json(:include => { :modelb => { :only => :name }})
    

    그리고 중첩 할 수 같은 깊이 당신이 (의는 ModelB도 ModelC를 has_many 가정 해 봅시다) 필요로하는 :

    render :json => @export_data.to_json(:include => { :modelb => { :include => :modelc }})
    

    여러 자식 모델 연결을 포함 할 경우, 다음을 수행 할 수 있습니다 :

    render :json => @export_data.to_json(include: [:modelA, :modelB, :modelN...])
    
  2. ==============================

    2.당신이 JSON 렌더링에 대한보다 유연한 접근 방식을 원하는 경우에, 당신은 보석 제이빌더 사용을 고려할 수 있습니다 https://github.com/rails/jbuilder

    당신이 JSON 렌더링에 대한보다 유연한 접근 방식을 원하는 경우에, 당신은 보석 제이빌더 사용을 고려할 수 있습니다 https://github.com/rails/jbuilder

    그것은 당신이 편리한 방법으로 사용자 지정 특성, 인스턴스 변수, 협회, 재사용 JSON의 파셜을 렌더링 할 수 있습니다.

  3. from https://stackoverflow.com/questions/3462754/rails-object-relationships-and-json-rendering by cc-by-sa and MIT license