如何在Rails中构建JSON响应时呈现HTML视图?

问题描述:

我有一个返回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。 –

我写类似的东西在我的行动:

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

也许它会帮助你。

+0

你在哪里在你的方法中将模板呈现为HTML? –

您确定您有'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 

重复腌好的答案,因为我遇到了这个确切的问题及其对我工作。

尝试:

html = render_to_string :partial => 'foo/bar', :formats=>[:html]