[RUBY-ON-RAILS] 레일에 JSON을 렌더링 할 때 관련된 모델을 포함
RUBY-ON-RAILS레일에 JSON을 렌더링 할 때 관련된 모델을 포함
지금은이 라인을 가지고 :
render json: @programs, :except => [:created_at, :updated_at]
그러나, 회사 I belongs_to 프로그램 때문에 대신에 회사 ID의 회사 이름을 표시하고 싶습니다.
프로그램을 렌더링 할 때 어떻게 회사 이름을 포함 할 수있다?
해결법
-
==============================
1.이런 식으로 뭔가 작업을해야합니다 :
이런 식으로 뭔가 작업을해야합니다 :
render :json => @programs, :include => {:insurer => {:only => :name}}, :except => [:created_at, :updated_at]
-
==============================
2.컨트롤러 방법에서 포함으로 JSON을 렌더링하는 동안 내가 같은 "할 수있는 복제되지 기호 파일"오류가 발생했습니다. 그래서처럼 피할 수 :
컨트롤러 방법에서 포함으로 JSON을 렌더링하는 동안 내가 같은 "할 수있는 복제되지 기호 파일"오류가 발생했습니다. 그래서처럼 피할 수 :
render :json => @list.to_json( :include => [:tasks] )
-
==============================
3.또한 모델 수준에서이 작업을 수행 할 수 있습니다.
또한 모델 수준에서이 작업을 수행 할 수 있습니다.
Broujram.rb
def as_json(options={}) super(:except => [:created_at, :updated_at] :include => { :company => {:only => [:name]} } ) end end
이제 컨트롤러 :
render json: @programs
-
==============================
4.유지 보수 방법으로 중첩 된 모델을 포함하는 제이빌더의 사용을 고려 :
유지 보수 방법으로 중첩 된 모델을 포함하는 제이빌더의 사용을 고려 :
# /views/shops/index.json.jbuilder json.shops @shops do |shop| # shop attributes to json json.id shop.id json.address shop.address # Nested products json.products shop.products do |product| json.name product.name json.price product.price end end
-
==============================
5.이 시도. 참조
이 시도. 참조
#`includes` caches all the companies for each program (eager loading) programs = Program.includes(:company) #`.as_json` creates a hash containing all programs #`include` adds a key `company` to each program #and sets the value as an array of the program's companies #Note: you can exclude certain fields with `only` or `except` render json: programs.as_json(include: :company, only: [:name])
나는 우리가보기에 전달되지 않습니다 있으리라 믿고있어 같이 또한, 만들 필요는 인스턴스 변수를 @programs 없습니다.
-
==============================
6.
#includes is used to avoid n+1 query. # http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations Here is an example for the above example.Lets say you have posts and each post has many comments to it. @posts = Post.where('id IN [1,2,3,4]').includes(:comments) respond_to do |format| format.json {render json: @posts.to_json(:include => [:comments]) } end #output data [ {id:1,name:"post1",comments:{user_id:1,message:"nice"}} {id:2,name:"post2",comments:{user_id:2,message:"okok"}} {id:3,name:"post1",comments:{user_id:12,message:"great"}} {id:4,name:"post1",comments:{user_id:45,message:"good enough"}} ]
from https://stackoverflow.com/questions/17730121/include-associated-model-when-rendering-json-in-rails by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 0.0.0.0 당신이 구입에 무슨 일이 레일 서버를 결합 하는가? (0) | 2020.02.25 |
---|---|
[RUBY-ON-RAILS] 루비 온 레일즈에서 컨트롤러 URL의 앵커 부분을 가져 오기 (0) | 2020.02.25 |
[RUBY-ON-RAILS] 방법에 대한 간단한 양식 작업을 정의 하는가? (0) | 2020.02.25 |
[RUBY-ON-RAILS] 자식에 schema.rb을 관리 할 수있는 선호하는 방법은 무엇입니까? (0) | 2020.02.25 |
[RUBY-ON-RAILS] 기능을 확장 엔진 레일 (0) | 2020.02.25 |