source

레일 객체 관계 및 JSON 렌더링

myloves 2023. 3. 29. 22:07

레일 객체 관계 및 JSON 렌더링

면책 사항입니다. 저는 레일즈에 대해 아는 것이 거의 없습니다.간결하도록 하겠습니다.레일에서 다음과 같은 모델 관계가 지정됩니다.

class ModelA < ActiveRecord::Base
  belongs_to :ModelB

...

class ModelB < ActiveRecord::Base
    has_many :ModelA

Model A 컨트롤러의 show 액션을 호출하면 반환된 JSON은 문제의 Object A가 자녀인 Object B의 자녀인 모든 ObjectA를 표시해야 합니다.

오브젝트를 포함하는 오브젝트B가 있는 경우ID 1, 2, 3의 A에 접속하여 /modela/1.json에 접속합니다.

봐야지:

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

기본적으로는 다음을 나타내는 JSON만 표시됩니다.modelb를 참조해 주세요.그러나 Rails에 다른 관련 오브젝트도 포함하도록 지시할 수 있습니다.

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 }})

필요한 만큼 깊이 삽입할 수 있습니다(예를 들어 모델 B에도 모델 C가 많이 있습니다).

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

여러 하위 모델 연결을 포함하려는 경우 다음을 수행할 수 있습니다.

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

json 렌더링을 보다 유연하게 하고 싶은 경우 gem jbuilder를 사용하는 것을 고려해 보십시오.https://github.com/rails/jbuilder

이를 통해 사용자 지정 속성, 인스턴스 변수, 연결을 렌더링하고 json partial을 편리하게 재사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/3462754/rails-object-relationships-and-json-rendering