2011-03-03 3 views
0

나는이 때 문에 두 개의 긴 명령을 호출하기 위해 노력하고있어,하지만 어떤 이유 때문에 구문, 그것은 두 번가 호출되는 명령이 수행When 문에서 적절한 리팩토링에 대한 권장 사항은 무엇입니까?

@email = Email.find(params[:id]) 
    delivery = case @email.mail_type 
    # when "magic_email" these two delayed_jobs perform 2x instead of 1x. Why is that? 
    when "magic_email"  then Delayed::Job.enqueue MagicEmail.new(@email.subject, @email.body) 
           Delayed::Job.enqueue ReferredEmail.new(@email.subject, @email.body) 
    when "org_magic_email" then Delayed::Job.enqueue OrgMagicEmail.new(@email.subject, @email.body) 
    when "all_orgs"   then Delayed::Job.enqueue OrgBlast.new(@email.subject, @email.body) 
    when "all_card_holders" then Delayed::Job.enqueue MassEmail.new(@email.subject, @email.body) 
    end 
    return delivery 

어떻게 할 수 내가 when "magic_email"에 도달했을 때, 그것들은 지연된 작업들만을 렌더링하도록합니다. ?

+0

나는 'then'이 있는지 몰랐다. 당신이'배달'으로 무엇을하고 있는지 물어봐도 될까요? case 문이 끝난 후에도 값이 있습니까? – Wukerplank

+0

끝에 답을 추가하는 것을 잊어 버렸습니다. 이런 식으로이 메소드가 실행될 때, 그것은 지연된 : : 그것이 속한 작업을 수행한다. – Trip

답변

1

나는 다음의 예와 함께이 시도했다 : 이것은 잘 작동

 

    q = [] 
    a = case 1 
    when 1 then q.push 'ashish' 
       q.push 'kumar' 
    when 2 then q.push 'test' 
    when 4 then q.push 'another test' 
    end 
    puts a.inspect #######["ashish", "kumar"] 


. 구문이 괜찮 으면 귀하의 사례를 의미합니다. 다른 문제가 생길 수도 있습니다.

+0

덕분에 두 기능을 하나의 delayed_job에 함께 넣었습니다. – Trip

1

return delivery으로 전화를 걸었습니다. 전달되는 변수에 지연된 작업을 다시 호출 할 수있는 값이있을 수 있습니다. then 문이 반환하는 내용에 따라 다르므로 가능한 경우 아무 것도 반환하지 마십시오. 나는 당신이 지연된 일을하고 그 기능을 사용하여 아무 것도 돌려주고 싶지 않다고 믿는다.

어쩌면 case을 가지고 있고 변수에 저장하지 말아야합니다. 나는 전달 변수가 목적이 없다는 것을 의미한다.

관련 문제