1

我有一个返回 JSON 的控制器方法。但有时该 JSON 对象的一部分应该包含一个呈现的、序列化的 HTML 视图。所以我的控制器方法有这样一行:

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

但这失败了,因为 Rails 只寻找 JSON 视图!

ActionView::MissingTemplate(缺少部分 foo/bar 和 {:locale=>[:en], :formats=>[:json], :handlers=>[:erb, :builder, :coffee, :slim, :haml] }. […]

我该如何解决这个问题?


更新:我已经render_to_string使用下面的语法将一个“级别”的布局设置为 html,但是当该布局呈现自己的部分时,同样的错误仍然存​​在!

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

这里肯定有解决方案,对吧?


更新 2render_to_string :action => 'method_in_this_controller'似乎在起作用。

4

3 回答 3

1

重复Yanhao的回答,因为我遇到了这个确切的问题,它对我有用。

尝试:

html = render_to_string :partial => 'foo/bar', :formats=>[:html]
于 2014-02-27T18:27:34.327 回答
0

你确定你有一个文件'apps/views/foo/_bar.*'吗?我能够使用如何将部分呈现为字符串?

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
于 2013-12-24T08:12:36.027 回答
0

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

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

也许它会帮助你。

于 2012-10-19T07:43:01.807 回答