2012-10-19 120 views
1

我有一個返回JSON的控制器方法。但是有時候這個JSON對象的一部分應該包含一個渲染的序列化的HTML視圖。所以,我的控制器方法有這樣一行:如何在Rails中構建JSON響應時呈現HTML視圖?

html = render_to_string :partial => 'foo/bar' 
# ... 
render json: {x: 'y', html: html} 

但失敗了,因爲Rails的只是尋找JSON的意見!

::的ActionView MissingTemplate(缺少含{局部富/欄:區域設置=> [:EN]:格式=> [:JSON]:處理程序=> [:ERB,:助洗劑,:咖啡, :苗條,:HAML]} [...]

我怎樣才能解決這個


更新:?我已經得到了一個佈局的 「級別」,以render_to_string爲html使用下面的語法,但當佈局呈現自己的分部時,同樣的錯誤依然存在!

html = render_to_string :partial => "foo/bar.html.haml" 

當然,這裏有一個解決方案,對吧?


更新2render_to_string :action => 'method_in_this_controller'似乎做的伎倆。

+0

嘗試:'HTML = render_to_string:局部=> '富/酒吧',:格式=> [:HTML]' – Yanhao

+0

感謝您的建議!我可能做錯了,但這似乎並沒有辦法。 –

+0

提出2個請求會好嗎?一個用於html,如果需要的話,之後的json?單一目的總是好的。可能需要多行代碼和額外的ajax調用。但是誰知道。只是我的2cents。 –

回答

0

我寫類似的東西在我的行動:

def show 
    ... 
    respond_to do |format| 
    format.js { render :json => data } 
    end 
end 

也許它會幫助你。

+0

你在哪裏在你的方法中將模板呈現爲HTML? –

0

您確定您有'apps/views/foo/_bar。*'文件嗎?我能夠呈現HTML作爲一個JSON參數與How do I render a partial to a string?

respond_to do |format| 
    format.html { redirect_to post_path(post) } 
    format.js { 
    render json: { 
     error: flash[:error], 
     content: (render_to_string partial: '/comments/comment', locals: {comment: comment}, layout: false) 
    } 
    } 
end 
0

重複醃好的答案,因爲我遇到了這個確切的問題及其對我工作。

嘗試:

html = render_to_string :partial => 'foo/bar', :formats=>[:html] 
相關問題