0

我有 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 编写序列化类

4

2 回答 2

1

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

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

class Parent < ActiveRecord::Base 
class Child < Parent

我将有以下显示/索引操作:

def index
  render json: children, each_serializer: ParentSerializer
end

def show
  render json: child, serializer: ParentSerializer
end
于 2013-10-04T19:23:10.790 回答
0

你的问题不清楚,但我假设你想在你的角色中包含 p2cs。as_json是在 rails 中实现默认 JSON 序列化的首选方式

class Personna < ActiveRecord::Base
  def as_json( options={} )
    super( {include: [:p2cs]}.merge options )
  end
end

如果您的问题是为P2cand实现不同的行为Assertion,只需as_json在每个类中根据需要实现。

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

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

于 2013-03-14T08:13:14.857 回答