如何在Sinatra中自定义ActiveRecord :: RecordNotFound

时间:2014-03-07 18:36:42

标签: error-handling sinatra

在我的app.rb中我有一个get '/posts/:id'我已经实现了一个救援 ActiveRecord:RecordNotFound ,但它没有重定向到根网址,它仍然显示错误。有没有办法自定义ActiveRecord错误,如自定义路由错误(not_found

not_found do
  slim :not_found
end

get '/posts/:id' do
  begin
    @post = Post.find(params[:id])
    rescue ActiveRecord::RecordNotFound => e
      redirect '/'#or display a view or a flash-notice
  end
    slim :show_post
end

1 个答案:

答案 0 :(得分:2)

Sinatra Book recommends设置错误'路由并定义要通过它运行的自定义错误。在你的情况下,它看起来像这样

error ActiveRecord::RecordNotFound do
  redirect '/'
end

注意:只要您的Sinatra应用程序设置为"开发"您将仍然会看到带有堆栈跟踪的错误页面。环境。运行Sinatra时可以将其设置为其他环境:

ruby app.rb -e production 

更多关于Sinatra environments here