活动模型JSON序列化rails继承模型

时间:2013-03-13 14:19:06

标签: ruby-on-rails serialization

我有3个模型Persona,Assertion和类P2c继承自Assertion类

class Persona < ActiveRecord::Base
  # create_table "personas", :force => true do |t|
  #  t.text     "name",        :null => false
  #  t.text     "description"
  #  t.datetime "last_change", :null => false
  # end
    has_many :p2cs
end

class Assertion < ActiveRecord::Base
# create table "assertions", :primary_key => "id", :force => true do |t|
#    t.text "rationale",
# end
end

class P2c < Assertion
#create_table "p2cs", :primary_key => "assertion_ptr_id", :force => true do |t|
#  t.integer "persona_id",         :null => false
# end
    belongs_to :persona, :class_name => "Persona", :foreign_key => "persona_id"
end

我需要帮助来使用gem active_model_serializers

编写序列化类

2 个答案:

答案 0 :(得分:1)

我不明白你的问题。但我想你的STI存在问题。 RailsCast 409中没有解释STI和多态性,但他们在文档中讨论了它。

关键是您必须指定序列化程序。 可以说我有一个

class Parent < ActiveRecord::Base 
class Child < Parent

我会有以下show / index操作:

def index
  render json: children, each_serializer: ParentSerializer
end

def show
  render json: child, serializer: ParentSerializer
end

答案 1 :(得分:0)

你的问题不明确,但我想你想在你的角色中加入p2cs。 as_json是在rails

中实现默认JSON序列化的首选方法
class Personna < ActiveRecord::Base
  def as_json( options={} )
    super( {include: [:p2cs]}.merge options )
  end
end

如果您的问题是要为P2cAssertion实施不同的行为,请根据需要在每个类中实施as_json

注意您可能会发现有关json序列化的博文有趣,因为它澄清了as_jsonto_json之间的区别:http://jonathanjulian.com/2010/04/rails-to_json-or-as_json/

我们需要将json序列化分为两个步骤:构建属性的ruby哈希(as_json),然后将其序列化(to_json)。这种方式继承和重载更容易,因为我们可以只处理ruby哈希。