【问题标题】:Serialize a summary of a has_many relationship序列化 has_many 关系的摘要
【发布时间】:2014-09-16 14:28:00
【问题描述】:

如何包含关联对象的摘要而不是对象本身。例如,如果客户有_many 个项目,我可以这样做:

class ClientSerializer < ActiveModel::Serializer
  attributes :id, :name
  has_many :projects
end

但这将返回所有关联的项目。我宁愿只带回项目的数量、下载项目完整列表的 url、项目的上次更新时间等。

包含关联对象摘要的最佳方式是什么?

理想情况下,例如,生成的 JSON 应如下所示:

 {
  "id": 10,
  "name": "My Client",
  "projects": {
    "count": 5,
    "updated_at": "2014-09-09T13:36:20.000-04:00",
    "url": "https://my.baseurl.com/clients/10/projects"
  }

【问题讨论】:

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


    【解决方案1】:

    我不确定这是否是最好的方法,但我得到了这个工作:

    class ClientSerializer < ActiveModel::Serializer
      attributes :id, :name, :archive, :updated_at, :projects
      def projects
        collection = object.projects.to_a
        { count: collection.length,
          updated_at: collection.map(&:updated_at).max,
          url: projects_url }
      end
    end
    

    【讨论】:

      【解决方案2】:

      你可以创建一个实例方法:

      class ClientSerializer < ActiveModel::Serializer
        has_many :projects
      
        def project_count
          projects.size
        end
      end
      

      【讨论】:

      • 我想把它们收集到协会下。我更新了我的问题以表明我的意思。
      猜你喜欢
      • 2020-07-29
      • 1970-01-01
      • 2016-07-01
      • 1970-01-01
      • 2018-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多