免责声明,我对Rails知之甚少。我会尽量简洁。考虑到Rails中的以下模型关系:
class ModelA < ActiveRecord::Base belongs_to :ModelB ... class ModelB < ActiveRecord::Base has_many :ModelA
当调用ModelA控制器的show action时,返回的JSON应该显示所有ObjectA,这些ObjectAs是该ObjectB的子代的ObjectB的子代。
因此,如果我有一个包含ID 1、2和3的ObjectA的ObjectB,然后访问:/modela/1.json
我应该看到:
{ "modelb": { "id": "1", "modela": [insert the ModelA JSON for ID's 1, 2 and 3] } }
默认情况下,您只会获得modelb上面示例中表示的JSON 。但是,您可以告诉Rails也包括其他相关对象:
modelb
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 }})
您可以根据需要将它们嵌套得更深(假设ModelB也具有has_many ModelC):
render :json => @export_data.to_json(:include => { :modelb => { :include => :modelc }})
如果要包括多个子模型关联,则可以执行以下操作:
render :json => @export_data.to_json(include: [:modelA, :modelB, :modelN...])