我的控制器中有一个动作如下:
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异常?
答案 0 :(得分:3)
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
,即没有前导下划线)