ruby-on-rails - 事件模型序列化程序 - 是否可以显示嵌入对象的 URL?

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

我正在尝试使我的 API 高度连接/可抓取,因此我希望所有嵌入式对象关联返回关联对象的 URL,以及关联对象的 ID 和属性。

例如给定:

class Car < ActiveModel::Serializer
  attributes :id, :make, :model, :url
  has_many :passengers

  def url
    car_url(object)
  end
end

class Passenger < ActiveModel::Serializer
  attributes :id, :name, :url

  def url
    passenger_url(object)
  end
end

我希望 http://api.approot.com/car/3.json 返回如下内容:

{        
  - car: {
      id: 3,
      make: 'Ford',
      model: 'F150',
      url: 'http://api.approot.com/car/3.json',
    - passengers: [
        - {
             id: 7,
             name: 'Bill',
             url: 'http://api.approot.com/passengers/7'
           },
        - {
             id: 13,
             name: 'Will',
             url: 'http://api.approot.com/passengers/13'
          }
      ]
    }
}

然而,鉴于此实现,当您访问 Car 时,ActiveModel::Serializers 当前不会显示 Passenger 的“url”属性(因为我怀疑,在查看所访问的 Car 对象的范围内,“object”并未为 Passenger 定义通过上面的示例 URL)。

关于如何解决这个问题有什么想法吗?

谢谢!

最佳答案

由于您不在 View / Controller 的上下文中,您可能需要将 :host 选项传递给您的 *_url 方法。

def url
  car_url(object, host: "api.approot.com")
end

关于ruby-on-rails - 事件模型序列化程序 - 是否可以显示嵌入对象的 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23795900/

相关文章:

ruby-on-rails - 机架 ssl 不能与 Thin 一起使用

ruby-on-rails - 如何将Remotipart 1.0与Rails 3.2一起使用来保存文件上传

c# - 如何使用 Tlsharp 和 c# 从 Telegram 中的 channel_id 获取 access_hash?

api - 如何检测Win7家庭高级版、Win7专业版、Win7企业版或Win7旗舰版操作系统?

ruby-on-rails - 带参数的事件模型序列化器?

html - rails 单选按钮太远

ruby-on-rails - 图像在使用 ActiveStorage 的 Rails 应用程序中消失

javascript - Facebook:不允许身份验证流程

ruby-on-rails-4 - ActiveModel::Serializer::CollectionSerializer::NoSerializerError in active_model_serializer 0.10.0.rc5

ruby-on-rails - 使用 ActiveModel::Serializer 将数组/关系与属性序列化