1

私はRails 4.2.6で構築されたAPIを持っていて、アクティブモデルシリアライザー0.10.0を使用しています。 amsは素晴らしいですが、テーブルの列を表さないキーと値を返したいと思います。 APIは文字を作成するために使用され、ユーザーがその文字を見つけることができるURLを返す必要があります。線に沿って何か:アクティブモデルシリアライザでjsonレスポンスをカスタマイズするにはどうすればよいですか?

https://{DOMAIN}.com/letters/{LETTER.ID} 

私はこれを行うには何とかシリアライザを変更してください、または私はそれでシリアライザ情報が含まれていくつかのカスタムJSONをレンダリングするのですか?私はカスタムJSON出力と関係している他のいくつかの質問を確認しましたが、この質問を具体的には扱っていません。

EDIT

私はそれはあなたが意味かなり何か分からないが、私は、以下の@maxをあなたの方法を試してみました。ここで私は私のシリアライザに追加するものです。

attributes :id, :url, :date_created, etc... 
def url 
    "https://{www.example.com/previewpdf/mailings/#{id}" 
end 

私はこの両方を試してみました、そしてself.idを使用して、どちらも「未定義のメソッド 『ID』」エラーを返すので、私はコツコツおこう。

EDIT#2 私が使用してに切り替え:IDの代わりにIDを、それは未定義のメソッドエラーが消え作ったが、私はその最後の部分が必要な場合は、URLは

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

としてJSONにまで見せていますSubOrderId = 28291、または作成されているメーリングのIDが何であれ読み込みます。

EDIT

これはまだ私を困惑され、誰もがカスタム文字列応答のidキーの実際の値を含める方法を知っているのですか?

答えて

2

属性と同じ名前のメソッドが存在する場合、シリアライザは、シリアル化されるオブジェクトから属性を直接取得するのではなく、メソッドを呼び出します。

class FooSerializer < ActiveModel::Serializer 
    attributes :bar, :url 
    def url 
    something_url(object) 
    end 
end 

シリアル化されるオブジェクトには、url属性は不要です。

class FooSerializer < ActiveModel::Serializer 
    attributes :bar, :url 
    attribute(:url) { something_url(object) } 
end 

これを実行する別の方法は、ブロックとattributeを使用することです

関連する問題