2014-07-18 32 views
7

我想在Rails中将ERB模板渲染为纯文本。理想情况下,我可以做这样的事情:Rails纯文本模板

应用程序/视图/测试/ test.txt.erb

Test 
<%= @test %> 

当我试图,Rails的,错误如下抱怨:

ActionView::MissingTemplate (Missing template test/test, application/test with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee]}. Searched in: 
    * "/Users/landonschropp/Development/test/app/views" 
): 
+0

为什么你的文件名是'test.txt.erb'?是不是应该是'test.html.erb' – Pavan

+0

我想要呈现为纯文本,而不是HTML。 – LandonSchropp

+0

我明白你想把它作为纯文本来渲染,但是没有叫'txt'的格式,错误也是。 – Pavan

回答

8

最简单的方法是在你的行动:

render '/test/test.text.erb', layout: false, content_type: 'text/plain' 
+0

这个伎俩!感谢您的帮助。 – LandonSchropp

0

如果你只想渲染文件本身使用:

render "/test/test.text.erb" 

在开始时使用“/”很重要,因为rails会识别它是一个文件。当然,它不会从html标签中跳出“<”或“>”。

或者,如果它是纯文本格式不完全从一个文件,你可以内联它:

render plain: "OK" 
+0

感谢您的回复,但此答案缺少MIME类型。 – LandonSchropp

2

好,我找到了办法是增加

Mime::Type.register 'text/plain', :txt 

到environment.rb中

如果您需要,您可以添加默认值:{格式:'txt'}选项路由定义

Rails.application.routes.draw do 
    root 'pages#home' 

    get 'test', to: 'pages#test', defaults: {format: 'txt'} 
end 
+0

感谢您的回复,但这似乎并不适合我。我仍然收到上面的错误。 – LandonSchropp

0

只需用...

render 'test', layout: false, formats: [:text] 

...一般的作品,假设你的一个通常有一个名为test.text.erb模板根据/app/views搜索的位置。