1

我有一個API,建立在Rails 4.2.6上,並使用主動模型序列化器0.10.0。雖然ams很棒,但我想返回一個不代表表中列的鍵和值。 API用於創建一個字母,我需要返回用戶可以在該字母處找到的url。如何使用活動模型序列化器自定義json響應?

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,但都返回一個「未定義的方法‘身份證’」的錯誤,所以我會不斷地學習。

編輯#2 我切換到使用:ID,而不是ID,並取得了未定義的方法錯誤消失,但輸入的網址上顯示的是JSON作爲

https://www.example.com/pdfpreview?SubOrderId=id 

當我需要的最後一部分讀取SubOrderId = 28291,或者創建郵件的ID。

編輯

這仍然困擾着我,沒有人知道如何爲包括自定義字符串響應ID鍵的實際價值?

回答

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