代码之家  ›  专栏  ›  技术社区  ›  mechnicov

如何绕过错误ActiveRecord::RecordNotFound?

  •  0
  • mechnicov  · 技术社区  · 6 年前

    这是我的文件:

    惯例

    ...
    resources :users
    ...
    

    用户控制器.rb

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

    E.B

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

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

    当然,如果去 用户/ 20 它将被激活记录::RecordNotFound

    我试过 @user = User.find_by(id: params[:id]) . 但这不是个好主意,因为erb

    例如,我想重定向到根目录下的url并制作flash[:danger]。

    我怎么解决这个问题?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Marcin Kołodziej    6 年前

    不像一般的 rescue_from ,类似这样可以让您以不同的方式在一个控制器中处理不同的操作。

    def show
      unless @user = User.find_by(params[:id])
        flash[:danger] = "watch out"
        redirect_to root_path
      end
    end
    
        2
  •  2
  •   Alex Suslyakov    6 年前

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

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

    您可能希望呈现404或进行重定向