在我的路线.我有:
resources :workouts
在我的训练控制器我有:
def show respond_to do |format| format.html format.json { render :json => "Success" } end end
但是当我去/workouts/1.json时,我收到以下内容:
Template is missing
Missing template workouts/show,application/show with {:locale=>[:en],:formats=>[:json],:handlers=>[:erb,:builder,:coffee]}. Searched in: * “/home/rails/app/views”
这似乎表明格式是应该的,但它仍在搜索视图.相同的代码在其他控制器中功能相同的设置正常.另外,对于html视图来说,去/ workouts / 1似乎工作得很好,虽然当格式化的格式被删除时,它也正确地渲染了html视图.
解决方法
看看渲染的源代码
elsif options.include?(:json) json = options[:json] json = ActiveSupport::JSON.encode(json) unless json.is_a?(String) json = "#{options[:callback]}(#{json})" unless options[:callback].blank? response.content_type ||= Mime::JSON render_for_text(json,options[:status])
注意第三行.如果值为:json是一个字符串,那么render将不会自动为该值调用to_json.
所以值将保持为字符串,渲染将继续搜索模板.
要修复,提供一个有效的哈希甚至为了尝试的目的.
format.json { render :json => {:message => "Success"} }