如何在 Active Model Serializer 0.10 class 中选择性地包含/删除值
how to optionally include / delete values in an Active Model Serializer 0.10 class
我有以下 ASM 0.10:
class UserMicroSerializer < ActiveModel::Serializer
attributes :id, :name, :is_friend
def is_friend
@instance_options[:is_friend]
end
end
但也希望支持没有 is_friend 属性。
我尝试过各种方法,例如:
class UserMicroSerializer < ActiveModel::Serializer
attributes :id, :name
if @instance_options[:is_friend]
attributes :is_friend
end
def is_friend
@instance_options[:is_friend]
end
end
但收到错误消息:
NoMethodError: undefined method `[]' for nil:NilClass
如何让@instane_options 有条件地包含 is_friend
?
如果您可以有条件地在控制器中使用不同的序列化程序,那么您也许可以做到这一点
class SimpleUserMicroSerializer < ActiveModel::Serializer
attributes :id, :name
end
通过子类化简单的序列化程序,您没有太多代码重叠
class UserMicroSerializer < SimpleUserMicroSerializer
attributes :is_friend
def is_friend
@instance_options[:is_friend]
end
end
您也可以从控制器发送 { scope: 'is_friend' } 然后将其签入序列化程序。
class UserMicroSerializer < ActiveModel::Serializer
attributes :id, :name, :is_friend
def filter(keys)
keys.delete :is_friend if scope and scope[:is_friend]
super(keys)
end
end
我有以下 ASM 0.10:
class UserMicroSerializer < ActiveModel::Serializer
attributes :id, :name, :is_friend
def is_friend
@instance_options[:is_friend]
end
end
但也希望支持没有 is_friend 属性。
我尝试过各种方法,例如:
class UserMicroSerializer < ActiveModel::Serializer
attributes :id, :name
if @instance_options[:is_friend]
attributes :is_friend
end
def is_friend
@instance_options[:is_friend]
end
end
但收到错误消息:
NoMethodError: undefined method `[]' for nil:NilClass
如何让@instane_options 有条件地包含 is_friend
?
如果您可以有条件地在控制器中使用不同的序列化程序,那么您也许可以做到这一点
class SimpleUserMicroSerializer < ActiveModel::Serializer
attributes :id, :name
end
通过子类化简单的序列化程序,您没有太多代码重叠
class UserMicroSerializer < SimpleUserMicroSerializer
attributes :is_friend
def is_friend
@instance_options[:is_friend]
end
end
您也可以从控制器发送 { scope: 'is_friend' } 然后将其签入序列化程序。
class UserMicroSerializer < ActiveModel::Serializer
attributes :id, :name, :is_friend
def filter(keys)
keys.delete :is_friend if scope and scope[:is_friend]
super(keys)
end
end