将两种方法合二为一

时间:2017-07-19 16:24:05

标签: ruby-on-rails ruby ruby-on-rails-5

我有两种方法。

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

我想我可以将它们结合起来。 如此。

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

并调用此方法

 response_code_with_description(current_account.one_call_center, ticket_response.code)
 response_code_with_description(ticket_response.ticket.one_call_center, code)
你觉得怎么样?

1 个答案:

答案 0 :(得分:1)

这两种方法之间的主要区别似乎是这一部分:

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

因此换句话说,您可以直接与参数进行比较,也可以在参数上调用code方法。通过使参数自适应来解决这个问题:

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

这消除了两者之间的差异。

我强烈建议您重新访问代码中使用的名称,这些名称不合理。