Rails寻找JSON请求的模板

mak*_*war 18 ruby-on-rails ruby-on-rails-3

在我的routes.rb身上:

resources :workouts
Run Code Online (Sandbox Code Playgroud)

在我的训练控制器中,我有:

def show
  respond_to do |format|
    format.html
    format.json { render :json => "Success" }
  end
end
Run Code Online (Sandbox Code Playgroud)

但是当我去/workouts/1.json时,我会收到以下信息:

模板丢失了

缺少模板锻炼/显示,应用/显示{:locale => [:en],:formats => [:json],:handlers => [:erb,:builder,:coffee]}.搜索:*"/ home/rails/app/views"

这似乎表明格式应该是它应该是但它仍在搜索视图.这个相同的代码在其他控制器中运行,具有相同的设置就好了.此外,转到/ workouts/1的html视图似乎工作正常,但它也format.html删除后正确呈现html视图.

Bil*_*han 18

看一下源代码 render

      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])
Run Code Online (Sandbox Code Playgroud)

注意第三行.如果值为:json字符串,render则不会to_json自动为此值调用.

所以值仍然是字符串,render并将继续搜索模板.

要修复,请提供有效的哈希,即使是出于尝试目的.

format.json { render :json => {:message => "Success"} }
Run Code Online (Sandbox Code Playgroud)

  • 原始代码是渲染一个`@workouts`对象,它仍然试图渲染一个视图.类似地,`format.json {render:json => {:message =>"Success"}}`产生相同的缺失模板错误. (3认同)