如何将另一个表中的新属性添加到序列化程序?

时间:2016-05-27 15:41:21

标签: ruby-on-rails ruby rails-activerecord

我有以下表格:

Table1
    :name
    :resource

Table2
    :FK Table1
    :FK Other Table
    :quantity

以下序列化程序

class Table1 < ActiveModel::Serializer
  attributes :id,
             :name,
             :resource
end

我需要的是序列化程序返回其所有属性以及来自quantity的{​​{1}},它与之有关系。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

ActiveModel::Serializer实际上支持这一点,这是我的例子

class Table1Serializer < ActiveModel::Serializer
  attributes :id, :name, :resource
  has_one :table_2, serializer: Table2Serializer
end

class Table2Serializer < ActiveModel::Serializer
  attributes :id, :quantity
end

因此,您只需指定与相应序列化程序的关系,即使用Table1Serializer代替Table1,以避免误解Table1(模型)

另一个选择是,如果你不想写Table2Serializer,你可以使用自定义属性,它就像:

class Table1Serializer < ActiveModel::Serializer
   attributes :id, :name, :resource
   attributes :table_2

   def table_2
     object.table_2
   end
end

你可以通过两种方式申请,但对于你提到的关系,我更喜欢第一种选择,因为我可能会在以后使用Table2Serializer