我在我的Ticket
模型的應用程序中有一些相當複雜的JSON響應,我希望我的TicketDecorator
成爲構建這些響應的人。使用RABL與Draper渲染to_json
但是,我已經爲我的系統設置了API,並使用RABL來構建這些JSON響應,所以我想重用我已經創建的模板。
我不知道是否有可能從一個方法內作出內部TicketDecorator
一個Rabl的模板,這樣的事情:
這裏是我的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
爲零。
任何人有什麼好的解決方案,我可以如何讓這兩個很好地結合在一起?
我唯一真正的想法是將模板渲染爲一個字符串並手動使用RABL,但我不知道如何能夠在Draper內部調用render_to_string
,因爲它不是視圖幫助器。
對此有何想法?