那是我的文件:
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]。
我该如何解决这个问题?
答案 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