将rails多态关联对象渲染为JSON

时间:2013-06-25 11:29:59

标签: ruby-on-rails ruby-on-rails-3 polymorphic-associations

在我的控制器的索引操作中,我返回一个应该渲染为JSON的Picture模型数组。

def index
  @pictures = Pictures.all
  respond_to do |format|
    format.json { render json: @pictures.to_json( include: [:imageable] ) }
  end
end

此模型配置了多态关联。

class Picture < ActiveRecord::Base
  belongs_to :imageable, :polymorphic => true
end

class Employee < ActiveRecord::Base
  has_many :pictures, :as => :imageable

  attr_accessible :name
end

class Product < ActiveRecord::Base
  has_many :pictures, :as => :imageable

  attr_accessible :type
end

图片数组将包含Picture对象,其中包含与Employee和Product的可成像关联。如何向json呈现可成像关联对象不同包括Employeee和Product特定字段?

谢谢你, 阿萨夫

1 个答案:

答案 0 :(得分:2)

我建议你使用类似JBuilder的东西来构建你的json响应。

然后,使用您的逻辑创建一个名为index.json.jbuilder的模板文件来构建您的json。

您可以根据对象轻松构建json。

例如:

json.array! @pictures do |picture|
  json.picture_attribute1 = picture.picture_attribute1
  json.picture_attribute2 = picture.picture_attribute2
  if picture.imageable.is_a?(Employee)
    json.employee_name = picture.imageable.name
  else
    json.product_name = picture.imageable.name
  end
end

请查看JBuilder的文档,了解如何使用它。