我正在尝试使我的 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/