我的控制器中有很多这样的东西:
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 :(得分:0)
您可以使用send
执行此操作但在此之前我们需要确保您拥有正确的运营商slug
if %w[ups fedex usps].include?(carrier.slug)
send(carrier.slug).track(number)
end