【问题标题】:Rails: render doesn't work, still get `Template is missing`Rails:渲染不起作用,仍然得到`模板丢失`
【发布时间】:2014-04-10 06:56:20
【问题描述】:

我目前正在学习 Rails 指南。我完成了这些步骤,但仍然遇到错误。

我的 Ruby 版本是 ruby 2.1.1p76,Rails 版本是 4.0.4

按照指南的指示,我创建了一个Article Controller

class ArticlesController < ApplicationController
  def new
  end

  def create
    render plain: params[:article].inspect
  end

end

我应该得到{"title"=&gt;"First article!", "text"=&gt;"This is my first article."},但结果却是

Template is missing
Missing template articles/create, application/create with {:locale=>[:en], :formats=>[:html],    :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}.`

这是我的相关路线:

articles GET    /articles(.:format)          articles#index
         POST   /articles(.:format)          articles#create

更新:render plain:Rails 4.1.0 中引入的一种新方法,称为this issue

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4


    【解决方案1】:

    render 方法中,plain 选项被添加到Rails 4.1 并且您正在使用Rails 4.0.4。因此,rails 忽略了这个选项并开始寻找一个名为 articles/create 的模板,就像您在 ArticlesController#create 操作中一样。显然,模板不存在,所以您会收到错误 Template is missing

    请参阅 Github: Introduce render :plain and render :html, make render :body as an alias to render :text

    上有关此主题的讨论

    现在,要使用下面提到的语法,您需要升级到Rails 4.1

    render plain: params[:article].inspect
    

    使用您当前版本的Rails 4.0.4,您可以:

    render text: params[:article].inspect
    

    【讨论】:

    • 我碰巧遇到了同样的错误。我必须使用 rails 3.2 因为我正在使用的实际应用程序有这个版本。无论如何,您知道是否有机会获得该版本的此类教程?我在网站上没有找到任何记录。可能是我挖的不够。
    • @alexserver v3.2 的相关指南是 api.rubyonrails.org/v3.2/classes/ActionView/Helpers/… 。参考底部的render文档
    【解决方案2】:

    如果您想在页面上查看 params[:article] 的文本信息,可以使用render text

    试试这个

    class ArticlesController < ApplicationController
      def new
      end
    
      def create
        render text: params[:article].inspect
      end    
    end
    

    你会得到

    {"title"=>"First article!", "text"=>"This is my first article."}
    # i.e. your params(whatever params hash contains)
    

    【讨论】:

    • Cheers.Works for Rails 3.2.12。
    【解决方案3】:

    在 Gemfile 中更改 Rails 版本:

    # Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
    gem 'rails', '4.1.6'
    

    然后运行:

    bundle install
    

    确保您的 Rails 版本现在 > 4.1

    【讨论】:

      【解决方案4】:

      你不需要模板意味着你可以使用 render nothing: true

      试试这样:

      class ArticlesController < ApplicationController
       def new
       end
      
       def create
        params[:article].inspect
        render nothing: true
       end
      end
      

      请参考此链接click here

      【讨论】:

        【解决方案5】:

        您可能想通读following documentation

        当您响应 Ajax 或 期望不正确的 Web 服务请求 HTML。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-20
          • 2022-01-24
          • 2019-06-04
          相关资源
          最近更新 更多