2013-05-14 59 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 
相關問題