【问题标题】:have an attribute (which is a function) and use a specific serializer using Active Model Serializers有一个属性(它是一个函数)并使用 Active Model Serializers 使用特定的序列化器
【发布时间】:2014-04-02 20:39:24
【问题描述】:

我有以下活动模型序列化器,并希望为一个名为 notes 的方法使用特定的序列化器,该方法从实例返回一个注释数组

我已经尝试过这个和其他一些变化:

class MenuNotesSerializer < ActiveModel::Serializer
  attributes :id, :name, :notes(NoteSerializer)

和:

class MenuNotesSerializer < ActiveModel::Serializer
  attributes :id, :name, :tns

  def tns
    object.notes  #  works , serializer: NoteSerializer
  end

  def tns
    object.notes, serializer: NoteSerializer #doesn't work
  end

基本上我有一个 NoteSerializer,我想将它用于菜单上的 notes 方法返回的数组,但不知道如何完成。有什么想法吗?

提前谢谢

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.2 active-model-serializers


    【解决方案1】:

    这是基本数组的另一种解决方案(不是关系,或者当您想要一个非常具体的范围时):

    attributes :tns
    
    def tns
      object.notes.map do|note|
        NoteSerializer.new(note, scope: scope, root: false)
      end
    end
    

    甚至:

    def tns
      ActiveModel::ArraySerializer.new(object.notes, each_serializer: NoteSerializer)
    end
    

    【讨论】:

      【解决方案2】:
      class MenuNotesSerializer < ActiveModel::Serializer
        attributes :id, :name
        has_many :notes, serializer: NoteSerializer
      end
      

      【讨论】:

      • thx,我猜序列化器中的 has_many 与模型中的 has_many 有点脱节?还要等几下
      猜你喜欢
      • 2017-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      • 2012-11-19
      • 2018-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多