我有一个基于Rails 4.2.6构建的API,并使用活动模型序列化器0.10.0。虽然ams很棒,但我想返回一个不代表表中列的键和值。 API用于创建一个字母,我需要返回用户可以在其中找到该字母的URL。有点像:
https://{DOMAIN}.com/letters/{LETTER.ID}
我是否以某种方式修改了序列化程序,或者我是否渲染了一些包含序列化程序信息的自定义JSON?我已经检查了一些与自定义JSON输出有关的其他问题,但它们没有具体涉及这个问题。
修改
我尝试了下面的方法,@ max,虽然我不确定它是什么意思。这是我添加到序列化程序中的内容:
attributes :id, :url, :date_created, etc...
def url
"https://{www.example.com/previewpdf/mailings/#{id}"
end
我尝试了这两个,并使用了self.id,但两者都返回了“未定义的方法'id'”错误,所以我会继续插件。
编辑#2。编辑#2 我切换到使用:id而不是id,这使得未定义的方法错误消失,但是url在JSON中显示为https://www.example.com/pdfpreview?SubOrderId=id
当我需要最后一部分来阅读SubOrderId = 28291时,或者正在创建的邮件的id。
修改
这仍然令我困惑,有没有人知道如何在自定义字符串响应中包含id键的实际值?
答案 0 :(得分:2)
如果存在与属性同名的方法,则序列化程序将调用该方法,而不是直接从被序列化的对象获取属性。
class FooSerializer < ActiveModel::Serializer
attributes :bar, :url
def url
something_url(object)
end
end
请注意,被序列化的对象不需要具有url
属性。
另一种方法是将attribute
与块一起使用:
class FooSerializer < ActiveModel::Serializer
attributes :bar, :url
attribute(:url) { something_url(object) }
end