在 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})
我在从 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})