2011-10-06 4 views
0

을 수행하는 여러 줄의 코드 내 코드의 간단한 예제입니다 away_team 부서를 확인하십시오. 전달 된 첫 번째 매개 변수의 문자열 배열을 만들면 Object #가 전송됩니다. 그러나, 내가 말했듯이, 나는 하나의 시나리오에서 조건을 점검 할 필요가있다. 어떻게 DRY하는 것이 좋을까요? 따라서,DRY 같은 업데이트 기능 여기

def update_records! 
    [ 
     [ event_home_team,   true ], 
     [ event_away_team,   true ], 
     [ event_home_team_division, true ] 
     [ event_away_team_division, event_away_team_division != event_home_team_division ], 
     [ user,      true ] 
    ].each do |team, do_it| 
     if(do_it) 
      PoolRecord.for_recordable_and_user(team, user).update_for!(self) 
     end 
    end 
end 

또는 :

답변

4

간단한 도우미는 소음을 줄이려고합니다

def update_records! 
    update_one(event_home_team) 
    update_one(event_away_team) 
    update_one(event_home_team_division) 
    update_one(event_away_team_division) unless event_away_team_division == event_home_team_division 
    update_one(user) 
end 

private 

def update_one(team) 
    PoolRecord.for_recordable_and_user(team, user).update_for!(self) 
end 

그리고 어떤 이유로 당신이 또 다른 조치를 취할하려는 경우이 뭔가를 할 수 있습니다 데이터에서 다음과 같이 작동 할 수 있습니다.

def update_records! 
    [ 
     event_home_team, 
     event_away_team, 
     event_home_team_division, 
     event_away_team_division, 
     user 
    ].uniq.each do |team| 
     PoolRecord.for_recordable_and_user(team, user).update_for!(self) 
    end 
end 

이 마지막 하나가 unless a == b 원래 상태로 간단한 uniq 필터가있는 상태.

데이터의 정확한 특성이나 얼마나 멀리 가져 가고 싶은지 알 수 없으므로 몇 가지 아이디어를 제시했습니다. 나는 마지막 것이 "당신이 의미하는 바를 말하기"에 가장 가깝다고 생각하지만, 그렇지 않을 수도 있습니다.

+0

매우 우아합니다. 도와 주셔서 감사합니다. – keruilin