我有Ruby on Rails API,我想渲染一个包含所有已分配数据的模型(在多个级别上)。我的模型结构如下所示:
class Race < ApplicationRecord
has_many :efforts, :dependent => :delete_all
end
class Effort < ApplicationRecord
belongs_to :race
has_many :segment_efforts, :dependent => :delete_all
end
class SegmentEffort < ApplicationRecord
belongs_to :effort
因此,当用户调用/ race / 1时,他应该获得ID为1的所有努力,属于第1场的所有努力以及属于所选努力的所有segmentefforts。在轨道上有可能吗?我只发现,您可以使用:inlude渲染关联对象,如下所示:
render json: @race.to_json(:include => [:efforts])
但是我想知道,如果在某种程度上可以在工作中加入分段工作,那么这将是一个明智的做法。或者可能有更好的方法来加载这些资源?
答案 0 :(得分:0)
是的,您可以使用jbuilder构建更强大的JSON结构来响应查询。
首先,您要确保SQL查询有效。如果您使用预先加载,Rails将为您处理:
@race = Race.includes(efforts: :segment_efforts).find(params[:id])
然后你的观点看起来像这样:
# app/views/races/show.json.jbuilder
json.(@race, :name, :foo)
json.efforts(@race.efforts) do |effort|
json.effort_name effort.name
json.someother_attr effort.someother_attr
json.segment_efforts(effort.segment_efforts, :another_attr)
end
请务必查看jbuilder examples以了解语法的可能性。