今、私はこの行を持っています:
render json: @programs, :except => [:created_at, :updated_at]
ただし、プログラムは会社に属しているため、会社 ID の代わりに会社名を表示したいと考えています。
プログラムを表示するときに会社名を含めるにはどうすればよいですか?
今、私はこの行を持っています:
render json: @programs, :except => [:created_at, :updated_at]
ただし、プログラムは会社に属しているため、会社 ID の代わりに会社名を表示したいと考えています。
プログラムを表示するときに会社名を含めるにはどうすればよいですか?
コントローラーメソッドからのインクルードを使用してjsonをレンダリングしているときに、同じ「シンボルファイルを複製できません」というエラーが発生しました。次のように避けました:
render :json => @list.to_json( :include => [:tasks] )
これは、モデル レベルでも実行できます。
program.rb
def as_json(options={})
super(:except => [:created_at, :updated_at]
:include => {
:company => {:only => [:name]}
}
)
end
end
今あなたのコントローラーで:
render json: @programs
jbuilderを使用して、ネストされたモデルを保守可能な方法で含めることを検討してください。
# /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
これを試して。参照
#`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
インスタンス変数をビューに渡さないと想定しているため、インスタンス変数を作成する必要はありません。