モデルのアプリケーションにかなり複雑な JSON 応答がいくつかあるので、それらの応答を作成するのはTicket
私にしたいと考えています。TicketDecorator
ただし、システム用の API を既にセットアップしており、RABL を使用してこれらの JSON 応答を作成しているため、既に作成したテンプレートを再利用したいと考えています。
次のように、メソッド内から RABL テンプレートをレンダリングできるかどうか疑問に思っていますTicketDecorator
。
これが私のRABLテンプレートですtickets/show.json.rabl
object @ticket
attributes :id, :link, :reported_ago_in_words_with_reporter,
:last_updated_in_words_with_updater, :priority_label, :status,
:location, :category_list
node(:attachment_urls) { |ticket| [ asset_path(ticket.first_attachment_url), asset_path(ticket.second_attachment_url), asset_path(ticket.third_attachment_url) ] }
node(:comment_count) { |ticket| ticket.comments.count }
child :recent_comments do
extends 'comments/index'
end
ここに私のTicketDecorator
方法があります:
class TicketDecorator < ApplicationDecorator
def as_json
h.render(template: "tickets/show", formats: :json)
end
end
ただし、@ticket を正常に設定できないため、これは機能せず、次のようなエラーが表示され undefined method `first_attachment_url' for nil:NilClass
ます@ticket
。
これら2つをうまく連携させる方法について、誰か良い解決策がありますか?
render_to_string
私の唯一の本当の考えは、テンプレートを文字列にレンダリングし、RABL を手動で使用することですが、ビューヘルパーではないため、Draper 内でどのように呼び出すことができるかわかりません。
それについて何か考えはありますか?