一尘不染

Rails对象关系和JSON呈现

json

免责声明,我对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]
  }
}

阅读 198

收藏
2020-07-27

共1个答案

一尘不染

默认情况下,您只会获得modelb上面示例中表示的JSON 。但是,您可以告诉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 }})

您可以根据需要将它们嵌套得更深(假设ModelB也具有has_many ModelC):

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

如果要包括多个子模型关联,则可以执行以下操作:

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