【问题标题】:Template is missing error when rendering html in Rails controller action在 Rails 控制器操作中呈现 html 时模板丢失错误
【发布时间】:2014-05-23 08:27:29
【问题描述】:

我正在尝试使用 render html: 从控制器操作中渲染原始 html:

class SomeController < ApplicationController
  def raw_html
    render html: '<html><body>Some body text</body></html>'
  end
end

但是,当我运行此控制器操作时,我收到“模板丢失”错误

我不想使用模板,只渲染原始 html。

我得到的错误是:

由 SomeController#raw_html 处理为 HTML 参数: {} ActionView::MissingTemplate(缺少模板 some_controller/raw_html 使用 {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby]}。搜索:* “/Users/doved/source/sample_app/app/views”* “/Users/doved/.rvm/gems/ruby-2.0.0-p353@syp/gems/chameleon-0.2.4/app/views” *“/Users/doved/.rvm/gems/ruby-2.0.0-p353@syp/gems/kaminari-0.15.1/app/views”): app/controllers/some_controller.rb:14:in raw_html'
lib/middleware/cors_middleware.rb:8:in
call'

我使用的是 Rails 4.0.2

我做错了什么?

【问题讨论】:

  • 当你得到这个错误时,你能分享生成的服务器日志+错误堆栈跟踪吗?
  • 添加了错误/堆栈跟踪
  • 您使用的 Rails 版本是什么?
  • @KirtiThorat 在我的问题中添加了 rails 版本
  • 我已经发布了答案。如果您有任何疑问,请告诉我。

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


【解决方案1】:

html 选项已添加到Rails 4.1 版本中的render 方法中。

查看有关此主题的讨论on Github

如果您将 Rails 版本升级到 Rails 4.1,那么您将能够将 html 呈现为

def raw_html
  render html: '<html><body>Some body text</body></html>'.html_safe ## Add html_safe
end

使用当前版本的Rails 4.0.2,您需要使用

def raw_html
  render text: '<html><body>Some body text</body></html>' 
end

你得到的错误是:ActionView::MissingTemplate

因为目前render 不支持html 选项,所以使用html 选项传递的值被忽略,Rails 开始在views 目录中寻找模板some_controller/raw_html

【讨论】:

    【解决方案2】:

    可能重复

    这应该适合你:

    render text: '<html><body>Some body text</body></html>'
    

    【讨论】:

    • 这确实有效,我可以输出一个内容类型来表明它是 html,但不完全是我想要做的
    • 其实 - 不需要设置内容类型,我可以只渲染 html,并且 text/html 会自动作为内容类型出现
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    相关资源
    最近更新 更多