Rails对象关系和JSON呈现

免责声明,我对Rails了解甚less。 我会尽量简洁。 鉴于Rails中的以下模型关系:

class ModelA < ActiveRecord::Base belongs_to :ModelB ... class ModelB < ActiveRecord::Base has_many :ModelA 

当调用ModelA控制器的show动作时,返回的JSON应该显示所有ObjectA,它们是所讨论的ObjectA所属ObjectB的子对象。

所以如果我有一个ObjectB包含ID为1,2和3的ObjectA,然后访问:/modela/1.json

我应该看到:

 { "modelb": { "id": "1", "modela": [insert the ModelA JSON for ID's 1, 2 and 3] } } 

默认情况下,您只会在上面的示例中获得代表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也拥有Model_C):

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

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

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

如果你想要一个更灵活的方法来渲染json,你可以考虑使用gem jbuilder: https : //github.com/rails/jbuilder

它允许您以便捷的方式呈现自定义属性,实例variables,关联,重用json partials。