2013-05-14 49 views
0

时,我有一些这些在我的控制器:重构情况/使用字符串

def ups 
    @ups ||= Shipper::Ups.new(
    ENV['UPS_ACCESS_KEY'], 
    ENV['UPS_PASSWORD'], 
    ENV['UPS_USERNAME'], 
    ENV['UPS_ACCOUNT'] 
) 
end 

然后,我有该程序被调用:

def type(number, carrier) 
    case carrier.slug 
    when 'ups' 
    number_details = ups.track(number) 
    when 'fedex' 
    number_details = fedex.track(number) 
    when 'usps' 
    number_details = usps.track(number) 
    end 

    return number_details 
end 

,但似乎我可以重构相当多有点如果我可以采取carrier.slug并将其前置到ups.track(number)这样的行。

有没有办法做到这一点?

回答

0

可以使用send要做到这一点,但在此之前,我们需要确保你有合适的载体蛞蝓

if %w[ups fedex usps].include?(carrier.slug) 
    send(carrier.slug).track(number) 
end 
相关问题