【问题标题】:Rails render status: :not found missing template errorRails 渲染状态::未找到缺少模板错误
【发布时间】:2018-02-26 00:42:24
【问题描述】:

在为课程开发应用程序时,我遇到了一个绊脚石:

The error screen

这是我的 Stocks Controller 错误,错误出现的地方:

class StocksController < ApplicationController
  def search
    if params[:stock]
      @stock = Stock.find_by_ticker(params[:stock])
      @stock ||= Stock.new_from_lookup(params[:stock])
    end

    if @stock
      render json: @stock
      #render partial: 'lookup'

    else
      render status: :not_found ,nothing: true
    end

  end

end

在课程中,他们的代码与我相同,但对他们来说,它可以工作。我知道的唯一区别是他们正在使用 Rails 4(Nitrous),而我正在使用 Rails 5 (Mac OS X/Atom IDE/GitLab 存储库)。如果可以,请帮助我!提前谢谢!

【问题讨论】:

    标签: ruby-on-rails rendering


    【解决方案1】:

    :nothing 选项是deprecated,将在 Rails 5.1 中删除。使用head 方法以空响应体响应。

    试试这个:

    render body: nil, status: :not_found
    

    或:

    head :not_found
    

    请不要将错误发布为图片,复制粘贴文本

    【讨论】:

      【解决方案2】:

      这里的问题是您没有在 else 子句中呈现 json,因此 Rails 会寻找不存在的 HTML 视图。要解决此问题,请将代码更新如下:

      class StocksController < ApplicationController
        def search
      
          if params[:stock]
            @stock = Stock.find_by_ticker(params[:stock])
            @stock ||= Stock.new_from_lookup(params[:stock])
          end
      
          if @stock
            render json: @stock
            #render partial: 'lookup'
      
          else
            render :json => {:error => "not-found"}.to_json, :status => 404
          end 
      
        end
      
      end
      

      【讨论】:

      • 也感谢您提供此解决方案,效果非常好!
      猜你喜欢
      • 1970-01-01
      • 2014-02-13
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 2013-05-13
      • 1970-01-01
      相关资源
      最近更新 更多