在 rails gem active_model_serializers 中将参数传递给序列化程序

Passing arguments to serializer in rails gem active_model_serializers

我在从 jbuilder 迁移到 active_model_serializers (AMS v0.9) 时遇到了一些问题。要构造 previus json,我需要将另一个对象作为参数传递到我的序列化程序中。

我看到有一些选择,但没有一个适合我。

这是我调用序列化程序的控制器:

def show
  serialized_profile = ProfileSerializer.new(@profile, root: false,
                                                       scope: current_relationship,
                                                       couple_ser: @couple,
                                                       partners_ser: @partners)
  respond_to do |format|
    format.html
    format.json { render json: serialized_profile }
  end
end

@profile@couple@partner设置在before_action

这是我的序列化程序:

class ProfileSerializer < ActiveModel::Serializer
  attributes :couple

  def couple
    return nil if serialization_options[:couple_ser].nil?
    serialization_options[:couple_ser]
  end
end

问题是我完全确定我的控制器在请求 show 方法时有变量 @couple。但是它总是抛出空值。

我在 ruby rails 相对较新。那么有人可以帮助我吗?

请注意,我只发布了要讨论的代码的基本部分。

干杯

如果您使用的是 AMS v0.10,您应该在序列化程序中使用“@instance_options”而不是 'serialization_options'。

对于 v0.9

你试过这样的东西吗?

ProfileSerializer
  .new(@profile, {root: false, scope: current_relationship})
  .as_json({couple_ser: @couple, partners_ser: @partners})