如何在“render:template => ...”之后访问“assigns”?

时间:2008-10-16 18:42:13

标签: ruby-on-rails ruby actionview

我的ApplicationController中有一个错误处理方法:

rescue_from ActiveRecord::RecordNotFound, :with => :not_found

def not_found(exception)
  @exception = exception
  render :template => '/errors/not_found', :status => 404
end

RAILS_ROOT/app/views/errors/not_found.html.erb中,我有这个:

<h1>Error 404: Not Found</h1>
<%= debug @exception %>

@exception始终是nil。我试过debug assigns,但总是{}。调用render :template时是否会复制分配?如果是这样,我怎么能得到它们?

我在Rails边缘。

2 个答案:

答案 0 :(得分:5)

这很奇怪,我不知道为什么。作为替代方案,您是否尝试将异常作为显式本地传递?

def not_found(exception)
  render :template => '/errors/not_found', 
         :status   => 404, 
         :locals   => {:exception => exception}
end

和视图:

<h1>Error 404: Not Found</h1>
<%= debug exception %> <!-- Note no '@' -->

答案 1 :(得分:1)

ActionController::Base的API文档看起来应该尝试:

render :template => '/errors/not_found', :status => 404, :locals => {:exception => exception}