可以添加到 0.8 Active Model Serializer 中显示的属性
Possible to add to displayed attributes in an 0.8 Active Model Serializer
我想像这样调用我的序列化程序(使用主 https://github.com/rails-api/active_model_serializers/tree/0-8-stable 的 ASM 0.8):
def edit
@loc=Location.find(params[:id])
render json: @loc, serializer: LocationSmallSerializer, root: "data", meta: "success", meta_key: 'status', show_admin:true
end
其中 show_admin 值将即时生成,以便管理员的 api 中的额外字段仅对管理员用户存在。
序列化程序看起来像这样:
class LocationSmallSerializer < ActiveModel::Serializer
attributes :name, :show_admin, :admin_vals
def admin_vals
????
if @options[:show_admin]==true
add these attributes
end
end
如何将 'admin_vals' 中的属性与上面的属性合并?或者如果更好的解决方案,它会是什么?
您可以在序列化程序中使用 AMS include_attribute?
有条件地包含属性。
例如,要有条件地包含 admin_vals
,您必须在序列化程序中添加一个方法:
def include_admin_vals?
@options[:show_admin] == true
end
如果你的序列化器中有这个,那么只有在 include_admin_vals?
方法 returns true
时才会包含 admin_vals
属性。除此以外,
admin_vals
属性不会暴露。
要有条件地包含序列化程序的多个属性,
你必须 include_attribute?
检查每一个。
例如如果你想有条件地包含名为 admin_val_1
、admin_val_2
、admin_val_3
的三个属性,那么你必须在序列化程序中添加这些方法:
def include_admin_val_1?
@options[:show_admin]==true
end
def include_admin_val_2?
@options[:show_admin]==true
end
def include_admin_val_3?
@options[:show_admin]==true
end
我想像这样调用我的序列化程序(使用主 https://github.com/rails-api/active_model_serializers/tree/0-8-stable 的 ASM 0.8):
def edit
@loc=Location.find(params[:id])
render json: @loc, serializer: LocationSmallSerializer, root: "data", meta: "success", meta_key: 'status', show_admin:true
end
其中 show_admin 值将即时生成,以便管理员的 api 中的额外字段仅对管理员用户存在。
序列化程序看起来像这样:
class LocationSmallSerializer < ActiveModel::Serializer
attributes :name, :show_admin, :admin_vals
def admin_vals
????
if @options[:show_admin]==true
add these attributes
end
end
如何将 'admin_vals' 中的属性与上面的属性合并?或者如果更好的解决方案,它会是什么?
您可以在序列化程序中使用 AMS include_attribute?
有条件地包含属性。
例如,要有条件地包含 admin_vals
,您必须在序列化程序中添加一个方法:
def include_admin_vals?
@options[:show_admin] == true
end
如果你的序列化器中有这个,那么只有在 include_admin_vals?
方法 returns true
时才会包含 admin_vals
属性。除此以外,
admin_vals
属性不会暴露。
要有条件地包含序列化程序的多个属性,
你必须 include_attribute?
检查每一个。
例如如果你想有条件地包含名为 admin_val_1
、admin_val_2
、admin_val_3
的三个属性,那么你必须在序列化程序中添加这些方法:
def include_admin_val_1?
@options[:show_admin]==true
end
def include_admin_val_2?
@options[:show_admin]==true
end
def include_admin_val_3?
@options[:show_admin]==true
end