2017-07-19 7 views
-4

Ich habe zwei Methoden.Kombinieren von zwei Methoden zu einem

def response_code_description(code) 
    @response_code_description ||= current_account.one_call_center.response_codes_repository_class.new.to_api_collection 
    @response_code_description.find {|k| k['code'] == code}.try(:[], 'description') 
end 

def ticket_response_code_with_description(ticket_response) 
    @ticket_response_code_with_description ||= ticket_response.ticket.one_call_center.response_codes_repository_class.new.to_api_collection 
    @ticket_response_code_with_description.find { |k| k['code'] == ticket_response.code }.try(:[], 'description') 
end 

Ich denke, ich kann sie kombinieren. So.

def response_code_with_description(one_call_center, code) 
    @ticket_response_code_with_description ||= one_call_center.response_codes_repository_class.new.to_api_collection 
    @ticket_response_code_with_description.find { |k| k['code'] == code }.try(:[], 'description') 
end 

und rufen Sie diese Methode so

response_code_with_description(current_account.one_call_center, ticket_response.code) 
response_code_with_description(ticket_response.ticket.one_call_center, code) 

was denken Sie?

+4

stackoverflow ist speziell für technische Probleme (Bugs, Code, der nicht tut, was er soll, etc). Wenn Sie nach Meinungen zum besten Weg suchen, Ihren Code zu organisieren, sollten Sie versuchen, die [codereview stackexchange] (https://codereview.stackexchange.com/) – eiko

+0

, dass gesagt wird, es sieht aus wie du bist auf der rechten Seite Spur. Der Versuch, für jeden Objekttyp, der ein "one_call_center" enthält, eine andere Funktion zu erstellen, skaliert nicht. – eiko

Antwort

1

Der wesentliche Unterschied zwischen diesen beiden Verfahren scheint dies ein Teil zu sein:

k['code'] == code 
k['code'] == ticket_response.code 

Also mit anderen Worten entweder direkt auf das Argument zu vergleichen, oder die code auf dem Argumente genannt Methode. Beheben Sie dieses Problem, indem Sie das Argument adaptiv machen:

def to_description(code) 
    code = code.code if (code.respond_to?(:code)) 
    # ... Rest of code presuming `code` is the thing to compare against. 
end 

Dies beseitigt den Unterschied zwischen den beiden.

Ich möchte Sie dazu ermutigen, die in Ihrem Code verwendeten Namen erneut zu lesen, da sie unangemessen ausführlich sind.

Verwandte Themen