【问题标题】:Rails looking for template for JSON requestsRails 为 JSON 请求寻找模板
【发布时间】:2013-11-15 17:23:02
【问题描述】:

在我的routes.rb 我有:

resources :workouts

在我的锻炼控制器中,我有:

def show
  respond_to do |format|
    format.html
    format.json { render :json => "Success" }
  end
end

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

模板丢失

缺少模板锻炼/节目,应用程序/节目与 {:locale=>[:en], :formats=>[:json], :handlers=>[:erb, :builder, :coffee]}。在以下位置搜索:*“/home/rails/app/views”

这似乎表明格式是应有的格式,但它仍在搜索视图。同样的代码在其他具有相同设置的控制器中也能正常工作。此外,为 html 视图转到 /workouts/1 似乎工作得很好,尽管当 format.html 被删除时它也会正确呈现 html 视图。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    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])
    

    注意第三行。如果:json的值是一个字符串,render不会自动调用to_json来获取这个值。

    所以值保持为字符串,render 将继续搜索模板。

    要解决此问题,请提供有效的哈希值,即使是出于尝试目的。

    format.json { render :json => {:message => "Success"} }
    

    【讨论】:

    • 原始代码是渲染一个@workouts 对象,它仍然试图渲染一个视图。同样,format.json { render :json => {:message => "Success"} } 产生相同的缺失模板错误。
    • 如果可能,最好粘贴回溯和日志。
    • 感谢您对现实的检查,比利。我最终向从未触发的 show 动作发出了 binding.pry 调用,经过进一步检查,我意识到有一个重复的空 show 动作,这就是被调用的内容,并且把一切都搞砸了。对于废话,我向所有人道歉,但感谢您的帮助。
    【解决方案2】:

    你可以试试 /workouts.json

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      • 2010-10-28
      • 2011-09-01
      相关资源
      最近更新 更多