簡體   English   中英

開始救援重構

[英]Begin Rescue Refactor

我不得不多次使用開始營救方法,並且我想進行重構,但是無法創建一個傳遞使用.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

一種非常簡單的方法是在語句中直接使用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

但是我不確定這就是你想要的...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM