开始救援重构

时间:2014-07-28 18:30:15

标签: ruby-on-rails exception exception-handling rescue

我不得不多次使用开始救援方式,我想重构但是我无法创建一个传递使用.parent方法的参数的方法。

这是因为.parent是引发错误的方法,但这是唯一正在改变的东西,我不知道如何在不调用方法的情况下编写代码

我确实想要获取父名称,但如果没有父级,那就是我收到错误的原因。所以我基本上需要它在没有父项时返回空字符串,但我不知道如何递归添加.parent。:

      def check_parent_name(object)

        if ['body','html', 'head', 'document'].include?(object.parent.name)
          ''
        else
          object.parent.content
        end

      end

      begin
        parent_content = check_parent_name(img.parent)
      rescue => e 
        parent_content = ''
      end

      begin
        parent_parent_content = check_parent_name(img.parent.parent)
      rescue => e 
        parent_parent_content = ''
      end

      begin
        parent_parent_parent_content = check_parent_name(img.parent.parent.parent)
      rescue => e 
        parent_parent_parent_content = ''
      end

      begin
        parent_parent_parent_parent_content = check_parent_name(img.parent.parent.parent.parent)
      rescue => e 
        parent_parent_parent_parent_content = ''
      end

      begin
        parent_parent_parent_parent_parent_content = check_parent_name(img.parent.parent.parent.parent.parent)
      rescue => e 
        parent_parent_parent_parent_parent_content = ''
      end

1 个答案:

答案 0 :(得分:0)

一种非常简单的方法是直接在语句中使用rescue

parent_content = check_parent_name(img.parent) rescue ""

但这不是你应该编码的方式。

就像DaveNewton所说,我们需要知道您想要的代码的用途,我们可以帮助您找到更好,更清晰,更灵活的方式来实现该功能!


您的记录之间似乎有一个树(父子)结构,我错了吗?

递归方法(=调用自身)可能是你想要的,例如:

def your_method(img)
  return "" unless img.present?

  if img.try(:parent).present?
    your_method(img.parent)    
  else
    return check_parent_name(img)
  end
end

但我不确定这是你想要的......