仅使用 ActiveModel::Serializer 序列化单个对象

Only serialize a single object with ActiveModel::Serializer

在我的项目中,我有一个模型 DrinkPayment:

class DrinkPayment < ActiveRecord::Base
  #Association
  belongs_to :drink
  belongs_to :participation
end

我的这个模型的序列化程序:

class DrinkPaymentSerializer < ActiveModel::Serializer
  ActiveModel::Serializer.setup do |config|
    config.embed = :ids
    config.embed_in_root = true
  end

  attributes :id, :participation_id, :drink_id

  has_one :participation
  has_one :drink
end

这样做会给我所有的 DrinkPayments (id, participation_id, drink_id),所有的 Participations(id, user_id,...) 和所有的 Drinks(id, club_id, ...)。我遇到的问题是我不需要参与,我只想要 DrinkPayments 和相应的饮料。或者甚至更好的只是饮料。

有没有可能用 ActiveModel::Serializer 实现这个?

只需更改 DrinkPaymentSerializer 以反映您的需要:

class DrinkPaymentSerializer < ActiveModel::Serializer
  attributes :id

  has_one :drink
end

您可以向序列化程序添加任何您想要的内容:

class DrinkPaymentSerializer < ActiveModel::Serializer
  attributes :drink_name, :price

  def drink_name
    object.drink.name
  end

  def price
    { amount: object.amount, currency: object.currency }
  end
end