在Ruby on Rails中处理无ID错误的最佳方法是什么?

Tin*_*n81 2 ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

在我的控制器中,我使用类似的东西来验证一个project真正属于给定的user:

private

def authorized_user
  @project = Project.find(params[:id])
  redirect_to root_path unless current_user?(@project.user)
end
Run Code Online (Sandbox Code Playgroud)

这很有效,因为用户A无法看到用户B的项目(他正在转发到根页面).

但是,只有project在请求确实存在的URL时,此方法才有效.

例如,URL http://localhost:3000/projects/1将显示用户的项目或转发到根URL(如果另一个用户尝试访问项目).

但是,当我试图访问一个项目,不存在于所有的数据库,例如像这样:

http://localhost:3000/projects/777

......我收到一个丑陋的ActiveRecord::RecordNotFound错误:

Couldn't find Person with id=777

在这里改善用户体验的最佳方法是什么?

我还没有真正部署过Rails项目,所以我甚至不知道这个错误在生产模式下会是什么样子.

有人可以帮忙吗?

谢谢...

Ser*_*sev 5

我个人喜欢用这个:

@project = Project.where(id: params[:id]).first
Run Code Online (Sandbox Code Playgroud)

如果项目不存在,@project将为零.