Rails 3渲染模板丢失,没有文件结束

时间:2011-02-16 21:39:55

标签: ruby-on-rails ruby-on-rails-3

我的控制器中有一个动作如下:

 def show
    @post = Post.find_by_setitle(params[:setitle])

    if !@post
      render 'error_pages/404'
      return
    end

    respond_to do |format|
      format.html
    end
  end

如果render error_pages/404我的模板丢失了。将其切换为render error_pages/404.haml.html可以正常工作。

为什么会这样?

N.B。没有实际的error_pages控制器或模型。只是一个方便的地方保留它们。

编辑:我正在使用mongoid,因此无法访问ActiveRecord。控制器基础无法查找特定的ActiveRecord异常?

2 个答案:

答案 0 :(得分:3)

来自documentation

  

render方法也可以使用完全在应用程序之外的视图(也许你在两个Rails应用程序之间共享视图):

     

由于前导斜杠字符,Rails确定这是一个文件渲染。为了明确,您可以使用:file选项(在Rails 2.2和更早版本中是必需的):

您需要传递:file选项,或者使用斜杠启动位置字符串。或者,您可以使用Rails功能来解决错误,并使用404从ActiveRecord::RecordNotFound恢复。有关详细信息,请参阅this post

答案 1 :(得分:0)

您应该使用render :template => 'error_pages/404'。 我认为Rails正在寻找一个名为_404的部分。

尝试1:

render 'error_pages/404'(并将文件命名为_404.html.erb

试一试2:

render :template => 'error_pages/404'(并将文件命名为404.html.erb,即没有前导下划线)