ruby-on-rails - 序列化 has_many 关系的摘要

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

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

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"
  }

最佳答案

我不确定这是否是最好的方法,但我已经做到了:

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

关于ruby-on-rails - 序列化 has_many 关系的摘要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25871455/

相关文章:

ruby-on-rails - ActiveModel 序列化程序继承

postgresql - 如何覆盖 heroku 的 database.yml 中的 pool 和 reaping_frequency

ruby-on-rails - Rails 4 补丁的 Rspec 案例 :update

ruby-on-rails - 有没有办法在循环内部知道您是否处于最终迭代?

ruby-on-rails - 事件记录选择查询到哪里并加入查询

ruby-on-rails - 如何调用 active_model_serializer 显式序列化记录

ruby-on-rails - jbuilder 与 rails-api/active_model_serializers 在 Rails 4 中处理 JSON

mysql - Rails 4.1 - 无需类型转换即可写入 MySQL 数据库

ruby-on-rails - 在 rails 中一次保存多个表

ruby-on-rails - 事情在 sidekiq 中排队但没有在 heroku 中执行