如何绕过错误ActiveRecord :: RecordNotFound?

时间:2018-11-30 09:49:55

标签: ruby-on-rails

那是我的文件:

routes.rb

...
resources :users
...

users_controller.rb

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

show.html.erb

<% provide(:title, @user.name) %>
...

例如,我还没有使用'id'= 20的用户。

当然,如果转到 users / 20 ,它将为ActiveRecord :: RecordNotFound

我尝试了@user = User.find_by(id: params[:id])。但这不是一个好主意,因为存在ERB

例如,我想重定向到root_url并设置为flash [:danger]。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

在这种情况下,您可以使用rescue_from。这是一种很常见的方法

rescue_from ActiveRecord::RecordNotFound, with: -> { render status: :not_found, nothing: true }

您可能想渲染404或进行重定向

答案 1 :(得分:2)

与通用rescue_from不同,这样的事情将使您能够以不同的方式在一个控制器中处理不同的动作。

def show
  unless @user = User.find_by(params[:id])
    flash[:danger] = "watch out"
    redirect_to root_path
  end
end