论坛首页 编程语言技术论坛

如何在 find(params[:id] 报RecordNotFound错误后,跳转指定页面?

浏览 3984 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-05-09  
就是在action中,当传入的ID通过 model.find(params[:id])没找到时,比如用户手动输入的id。就会出现难看的ActiveRecord::RecordNotFound页面。
我现在的做法是在ApplicationController加了
around_filter :rescue_record_not_found

def rescue_record_not_found
  begin
    yield
  rescue ActiveRecord::RecordNotFound
    render :file => "#{RAILS_ROOT}/public/404.html"
  end
end

一般来说应该怎么处理这个问题?
   发表时间:2008-05-09  
http://api.rubyonrails.org/classes/ActionController/Rescue/ClassMethods.html#M000226
1 请登录后投票
   发表时间:2008-05-10  
改成
rescue_from ActiveRecord::RecordNotFound :with => :rescue_record_not_found

def rescue_record_not_found
  render :file => "#{RAILS_ROOT}/public/404.html"
end

很好用。谢谢~~
0 请登录后投票
   发表时间:2008-05-16  
如果有新的异常,可以在用rescue_from ActiveRecord::RecordNotFound :with => :rescue_record_not_found  不会覆盖把?
可以继续添加吗?
例如:
rescue_from Mysql::Error :with => :rescue_mysql_error
def rescue_mysql_error
  render :file => "#{RAILS_ROOT}/public/404.html" 
end 
这样可以吗?如果数据库突然关闭,或者连接不上,该怎么捕获此类异常
0 请登录后投票
   发表时间:2008-07-23  
我也这样加入,可是说undefined method `RecordNotFound' for ActiveRecord:Module
要先导入吗?
0 请登录后投票
   发表时间:2008-07-24  
feiyelanghai 写道
我也这样加入,可是说undefined method `RecordNotFound' for ActiveRecord:Module
要先导入吗?

rescue_from ActiveRecord::RecordNotFound, :with => :rescue_record_not_found,中间应该有个逗号,如果没有就会出现你说的那个错误。
0 请登录后投票
   发表时间:2008-07-27  
Jan 写道
http://api.rubyonrails.org/classes/ActionController/Rescue/ClassMethods.html#M000226



   rescue_from 'MyAppError::Base' do |exception|
      renderml => exception, :status => 500
    end


不错不错

这种小的甜点,层出不穷呀!
0 请登录后投票
   发表时间:2008-07-27  
附:production mode下默认是会自动跳至404页面的。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics