在我們的rails 3.2應用程序中,我們使用Jbuilder來呈現我們的json響應(這裏沒有特別之處)。 JSON的觀點可能是如此簡單:Rails在模型中呈現json部分
_model_name.json.jbuilder
json.extract!(page, :id, :name, :url_name)
我們經常需要返回嵌套很深的JSON對象,和JBuilder諧音爲這個工作的偉大:
_page .json.jbuilder
json.extract!(page, :id, :name, :url_name)
json.page_images (page_images) do |json, page_image|
json.partial! page_image
end
最後一個例子將檢索頁面,並嵌套page_images,json的表示...再次沒有什麼特別的。
通常,單個部分會調用另一個部分,並且可能會返回深度爲2或3級的嵌套json對象。
問題
正如我前面提到的,我們使用JBuilder諧音快速多諧音鏈接在一起,形成視圖的深度嵌套JSON對象。我們還需要將這些完全相同的嵌套對象構建爲散列(而不是json),並使它們可用於模型。
它的簡單使用.attributes得到一個Jbuilder的對象輸出哈希!方法,但我們遇到了一些嚴重的困難,使得Jbuilder可以訪問模型中的視圖部分。
望着Jbuilder的來源,它看起來像JbuilderTemplate類需要的控制器上下文的訪問,使一切工作。
我們可以嘗試這樣的事:
class SomeClass
def initialize pages
@pages = pages
@context = ActionController::Base.new
end
def to_hash
builder = JbuilderTemplate.new(@context)
builder.pages(@pages) do |json, page|
json.partial! page
end
builder.attributes!
end
end
上面的例子顯然是不正確的,但它說明了需要做什麼。我只是不確定如何通過從模型初始化控制器,然後傳遞控制器上下文。
一些線索,我們下面:
誰能幫助我們指出了正確的方向?
看一看我的[以下答案】(http://stackoverflow.com/questions/9234018/rails-rendering-json-partial-in-model#answer-37977283)如果你仍然想成爲能夠重用您的jbuilder模板。 – 2016-06-30 17:07:23