2011-09-08 9 views
0

다음은 if/else 문입니다.if/else 문을 어떻게 리팩토링 할 수 있습니까?

if number.events.blank? 
    Resque.enqueue(ProcessNumbers, number.id) 
elsif number.events && !number.events.ordered.first.status.downcase.include? 'delivered' 
    Resque.enqueue(ProcessNumbers, number.id) 
end 

궁극적으로 "number.events가 비어 있으면 enqueue을 실행하거나 number.events.ordered.first.status.downcase.include에 'deliver'가 포함되어 있는지 확인하십시오 (number.events에 실제로 내용이 있는지 확인하십시오).

+1

나는'if/else'가 그랬던 것처럼 괜찮다고 생각하지만, 두 가지가 똑같이하는 것은 좀 이상합니다. –

+0

나는 그것들을 하나로 결합하는 방법을 알아 내려고 노력하고있다. – Shpigford

+0

만약 당신이 그들을 결합하고 싶다면'number.events.blank라면? || (number.events &&! number.events.ordered.first.status.downcase.include? 'delivered')'. –

답변

2

나는 루비 개발자가 아닌,하지만 그것은 number.events가 비어 있지 않은 것을 코드는 경우에 그 elsif에 "를 통해 가을"것이기 때문 elsifnumber.events 검사가 중복처럼 보인다. 당신이 if...or 상황이 될 수있다 퍼팅의 더 간결한 방법이 있기 때문에 그리고 :

if number.events.blank? || !number.events.ordered.first.status.downcase.include? 'delivered' 
    Resque.enqueue(ProcessNumbers,number.id) 
0

또는

if !number.events.blank? && !number.events.ordered.first.status.downcase.include? 'delivered' 
    Resque.enqueue(ProcessNumbers, number.id) 

그것은 number.events 실제로 뭔가가 있는지 확인합니다.

+0

이 코드가 실제로 똑같은 것을 어떻게 믿는 지 이해할 수 없습니까? 'number.events'가 비어 있으면 코드는'enqueue '하지 않습니다. – nathanvda

관련 문제