programing

Ruby on Rails - 여러 모델용 JSON 렌더링

magicmemo 2023. 2. 25. 20:52
반응형

Ruby on Rails - 여러 모델용 JSON 렌더링

JSON에서 여러 모델의 결과를 렌더링하려고 합니다.컨트롤러의 다음 코드는 첫 번째 결과 세트만 렌더링합니다.

  def calculate_quote
    @moulding = Moulding.find(params[:id])
    @material_costs = MaterialCost.all

    respond_to do |format|
      format.json  { render :json => @moulding }
      format.json  { render :json => @material_costs }
    end
  end

어떤 도움이라도 주시면 감사하겠습니다.

렌더링할 개체로 해시를 만든 다음 렌더링 메서드에 전달하는 방법이 있습니다.다음과 같은 경우:

respond_to do |format|
  format.json  { render :json => {:moulding => @moulding, 
                                  :material_costs => @material_costs }}
end

활성 레코드를 통해 모델을 연관지을 수 없는 경우, 이것이 가장 좋은 해결책일 수 있습니다.

어소시에이션이 존재하는 경우,:include다음과 같이 렌더 콜에 대한 인수를 지정합니다.

respond_to do |format|
  format.json  { render :json => @moulding.to_json(:include => [:material_costs])}
end

주의: 이 명령어를 취득할 필요가 없습니다.@material_costs위의 섹션의 변수(변수)는 이 접근 방식을 취하면 레일에서 자동으로 로딩됩니다.@moulding변수.

컨트롤러는 1개의 응답만 반환할 수 있습니다.이러한 오브젝트를 모두 반송하려면 1개의 JSON 오브젝트에 배치해야 합니다.

그럼 어떻게 해?

def calculate_quote
  @moulding = Moulding.find(params[:id])
  @material_costs = MaterialCost.all
  response = { :moulding => @moulding, :material_costs => @material_costs }
  respond_to do |format|
    format.json  { render :json => response }
  end
end

뭐랄까...

respond_to do |format|
      format.html # show.html.erb
      format.json { render :json => {:cancer_type => @cancer_type, :cancer_symptoms => @cancer_symptoms }}

결과는 이렇다

{"cancer_type":{"created_at":"2011-12-31T06:06:30Z","desc":"dfgeg","id":2,"location":"ddd","name":"edddd","sex":"ddd","updated_at":"2011-12-31T06:06:30Z"},"cancer_symptoms":[]}

그래서 효과가 있다.

감사합니다.

더 복잡한 예를 볼 수 없어서 나는 다음과 같이 말하고 싶었다.

  def calculate_quote
    moulding = Moulding.find(params[:id])
    material_costs = MaterialCost.all

    respond_to do |format|
      # there times you'll need multiple formats, no need to overuse instance vars:
      format.html do
        @moulding = moulding
        @material_costs = material_costs
      end
      format.json do
        # in case of as_json, you can provide additional options 
        # to include associations or reduce payload.
        moulding_json = moulding.as_json
        material_costs_json = material_costs.as_json
        render json: {
           moulding: moulding_json,
           material_costs: material_costs_json 
        }
      end
    end
  end

언급URL : https://stackoverflow.com/questions/4318962/ruby-on-rails-render-json-for-multiple-models

반응형