通过手动更改URL来调用ActiveRecord :: RecordNotFound

时间:2013-05-27 19:52:04

标签: ruby-on-rails ruby activerecord

我的应用程序中的用户URL如下:

localhost:3000/users/1/dashboard

如果有人手动将网址中的user ID更改为没有用户签名的号码,则会向我显示错误:

Couldn't find User with id=X.

有没有办法让用户返回其他地方?

我在user_controller.rb中试过类似的东西:

@user = User.find(params[:id])

unless @user
  redirect_to root_path
end

2 个答案:

答案 0 :(得分:3)

是的,例如:

def dashboard
  begin
    @user = User.find(params[:id])
  rescue ActiveRecord::RecordNotFound
    redirect_to root_path
  end
end

如果ActiveRecord无法找到记录,则会引发异常,这就是为什么unless @user ...无效。

答案 1 :(得分:1)

另一种不需要resque的方法是使用find_by_id,如果没有找到记录则返回nil:

def dashboard
  @user = User.find_by_id params[:id]
  redirect_to root_path unless @user
end