Rails:渲染不起作用,仍然得到“模板丢失”

时间:2014-04-10 06:56:21

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

我目前正在学习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"=>"First article!", "text"=>"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:是引用this issueRails 4.1.0中引入的新方法。

5 个答案:

答案 0 :(得分:46)

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

答案 1 :(得分:3)

如果您想在页面上看到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)

答案 2 :(得分:-1)

您不需要模板意味着您可以使用任何渲染:true

试试这样:

class ArticlesController < ApplicationController
 def new
 end

 def create
  params[:article].inspect
  render nothing: true
 end
end

请参阅此链接click here

答案 3 :(得分:-1)

更改Gemfile中的Rails版本:

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

然后运行:

bundle install

确保您的Rails版本现在是&gt; 4.1

答案 4 :(得分:-2)

您可能需要阅读following documentation

  

当您回复Ajax或者Ajax时,渲染纯文本非常有用   Web服务请求期望不正确的东西   HTML。