2014-11-07 3 views
-1

나는 내 컨트롤러의 if 조건을 사용하여 실행을 계속하는이 방법을 사용합니다.어떻게이 방법을 리펙토링 할 수 있습니까?

def continue_bulk_action 
(@non_deleteable_invoices < 1 && params[:destroy] == "Delete") || (@unsendable_invoices == 0 && params[:send] == "Send") ||(params[:destroy] != "Delete" && params[:send] != "Send") 
end 

어떻게이 방법을 리팩터링 할 수 있습니까?

답변

1

내가 는 각 테스트에서 의미를 추출합니다. 이것은 코드를보다 표현력있게 만듭니다.

def continue_bulk_action 
    delete_with_no_deletable_invoices || 
    send_with_no_unsendable_invoices || 
    not_delete_or_send 
end 

def delete_with_no_deletable_invoices 
    @non_deleteable_invoices < 1 && params[:destroy] == "Delete" 
end 

def send_with_no_unsendable_invoices 
    @unsendable_invoices == 0 && params[:send] == "Send" 
end 

def not_delete_or_send 
    params[:destroy] != "Delete" && params[:send] != "Send" 
end 
0

continue_bulk_action 방법을 다른 3 가지 방법으로 재사용하려고한다고 가정합니다. 조건을 사용하는 메소드에 조건을 전송/전송하지 않는 이유는 무엇입니까?

3

IMO이 쉽게 읽을 수있다, 또한 좀 더 효율적입니다 :

def continue_bulk_action 
    if params[:destroy] == "Delete" 
    @non_deleteable_invoices < 1 
    elsif params[:send] == "Send" 
    @unsendable_invoices == 0 
    else 
    true 
    end 
end 
관련 문제