2017-08-25 101 views
1

我想知道是否可以将数据从串行器发送到另一个,而不是从控制器发送到串行器。这是我在做什么:Ruby on Rails 5 - 在两个串行器之间传递数据

class Serializer1 < ActiveModel::Serializer 
    attributes \ 
    :id, 
    :past_teachings 

    def past_teachings 
    p_teachings = Teaching.all 
    p_teachings = ActiveModel::ArraySerializer.new(p_teachings, 
          each_serializer: Serializer2) 
    #### I would like to send data to serializer2 from the current serializer #### 
    end 
end 

我知道有可能从控制器发送数据到串行器。但是可以从串行器发送数据到另一个?

+0

什么样的数据奥马尔?像某种选项/参数?或序列化的数据?或者只在您提供的示例中进行收集? – lavilet

+0

@lavilet:我想发送一个活动的记录对象ID –

回答

0

是的。使用AMS 0.10.x,你可以改变这样的例子:

serializer_1.rb

class Serializer1 < ActiveModel::Serializer 
    attributes :id, :past_teachings 

    def past_teachings 
    ActiveModelSerializers::SerializableResource.new(PastTeaching.all, each_serializer: TeachingSerializer) 
    end 
end 

teaching_serializer.rb:

class TeachingSerializer < ActiveModel::Serializer 
    attributes :id, :name 
end 

如果要访问当前对象被序列化,你可以参考'对象'。您可以将对象函数作为object.function及其属性作为object ['attribute']来访问。

所以,从技术上说,你可以做这样的事情(尽管在现实中可能会使用AMS的has_many关系代替):

class Serializer1 < ActiveModel::Serializer 
    attributes :id, :past_teachings 

    def past_teachings 
    ActiveModelSerializers::SerializableResource.new(object.past_teachings.where(...), each_serializer: TeachingSerializer) 
    end 
end 
相关问题