我想有一個JSON響應,其中有些價值是由部分JSON ERB模板不能找到其他HTML部分
#projects_Controller.rb
def index
respond_to do |f|
f.json
end
end
# index.json.erb
{
"html":"<%= raw escape_javascript(render :partial => 'projects/disclaimer') %>"
}
渲染HTML,但我得到以下錯誤:
ActionView::Template::Error (Missing partial projects/disclaimer with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>
[:json], :locale=>[:en, :en]} in view paths "c:/rails/app/views", "c:/rails/vendor/plugins/more/app/views", "C:/Ruby192/lib/ruby/gems/1.9.1/gems/devise-1.1.8/app/views")
看起來JSON請求在其名稱中使用.json.erb呈現部分內容,但不是.html.erb,這就是我所擁有的。 有沒有辦法讓我指定'html'。
新增: 如果請求是 'JS',並在index.js.erb的我呈現幾乎相同的代碼: #index.js.erb的
disclaimer = {
"html":"<%= raw escape_javascript(render :partial => 'projects/disclaimer') %>"
}
它找到項目/免責聲明.html.erb並正確呈現它。我想知道爲什麼會有這樣的不一致性,如果有人要求js,模板中的任何部分渲染將查找partial_name.html.erb,但如果請求json,則部分渲染會要求partial_name.json.erb?
謝謝
這種方法也可以從呈現JSON的控制器內部工作;我設置了'self.formats = [:html]',然後'render_to_string(:partial =>'an_html_partial',:locals => {:whatever => whatever})',然後我可以渲染json。 – alxndr 2012-03-06 19:52:10
如果你還有其他的json partials,你可能需要'self.formats + = [:html]'來代替。 – 2014-01-31 08:59:32