2012-12-12 29 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) ...