2012-12-12 54 views
-1

如何清理它?它看起來很尷尬,太長了。簡單:需要幫助重構這種看起來很尷尬的方法

def report_total(feed_event, advisor) 
    count = 0 
    advisor.activity_feed_events.each do |lead| 
    if lead == SignupFeedEvent 
     count += 1 
    else 
     if lead.is_a?(feed_event) 
     if lead.event_date > (Time.now - 7.days) 
      count += 1 
     end 
     end 
    end 
    end 
    return count 
end 
+3

這應該在http://codereview.stackexchange.com上提問。 –

回答

1

也許你可以使用:

def report_total(feed_event, advisor) 
    advisor.activity_feed_events.count do |lead| 
    lead == SignupFeedEvent || 
     (lead.is_a?(feed_event) && lead.event_date > (Time.now - 7.days)) 
    end 
end 

不相同,方法更少的代碼。

0

閱讀一本好書,例如Refactoring Ruby edition。

良好的OO做法建議不要檢查類相等或is_a ?,而是檢查對象的功能,例如使用respond_to ?.

if lead.respond_to?(:event_date) ...