可以添加到 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_1admin_val_2admin_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