1

目前我有几个课程,每个课程都处理不同的网站。他们的行为就像同一类型,从某种意义上说,他们都有crawl_item()方法。

class CrawlA
  def crawl_item
    ...
    A.create()
  end
end

class CrawlB
  def crawl_item
    B.create()
  end
end

现在我想在调用其中任何一个时捕获一个模型验证异常crawl_item methods,并执行相同的救援操作。什么是实现这一点的好方法?

4

1 回答 1

3

为了保持 DRY,您可以使用经典的混合结构(模块 + 类包含)编写一个包装器:

module CrawlValidator
  def with_validations
    begin
      yield
    rescue => exc
      ...
    end
  end
end

class CrawlA
  include CrawlValidator

  def crawl_item
    with_validations { A.create }
  end
end
于 2012-08-01T08:15:48.847 回答