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

rails:处理已销毁对象上restful操作中异常的常用方法?

  •  0
  • Greg  · 技术社区  · 14 年前

    在铁轨上很常见 objects_controller 管制员要休息 edit destroy 这样的行为:

    def edit
      @object = Object.find(params[:id])
    end
    
    def destroy
      @object = Object.find(params[:id])
    
      @object.destroy
      redirect_to :back
    end
    

    使用提供编辑和销毁链接的关联视图,如下所示:

    <%= link_to "Edit the Object", edit_object_path(object) %>
    <%= link_to "Delete", object, :confirm => 'Are you sure?', :method => :delete %>
    

    很容易把它炸掉。如果我打开两个浏览器窗口A和B,在浏览器A中用“删除”链接销毁一个对象,然后在浏览器B中按“编辑”链接, find() 编辑 操作引发异常。

    更新以添加jakub的建议

    有几种方法可以解决这个问题:

    1. 捕获异常并在 编辑 行动
    2. 使用 @object = find(:first, "conditions... etc. 并测试 @object 编辑 行动
    3. 使用通用404

    但鉴于这是一种常见的模式,我很想知道其他人是如何处理这种情况的。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Jakub Hampl    14 年前

    在中编辑404页 public/404.html 以一种相当友好的方式来解释此人试图访问的内容不再可用。这是一般的解决办法。但是您的域可以允许软删除,然后您可以在编辑视图中取消删除记录。检查这个偏执的插件(我通常会在prefore_过滤器中实现它)。