I use active_shipping gem for calculate shipping cost and I have some problem.My package can have several identical objects. I use PackageItem class for these but when I use find_rates method I have this error.
NoMethodError: undefined method 'inches' for #<ActiveMerchant::Shipping::PackageItem:0x007fec95f24610>
That is example how I use it:
origin = Location.new(country: 'US', zip: '91801')
dest = Location.new(country: 'US', zip: '90001')
packages = PackageItem('test', 32, 18, 15, units: :imperial)
carrier = USPS.new(login: 'LOGIN')
carrier.find_rates(origin, dest, packages)
This is initializer for PackageItem:
def initialize(name, grams_or_ounces, value, quantity, options = {})
@name = name
imperial = (options[:units] == :imperial) ||
(grams_or_ounces.respond_to?(:unit) && m.unit.to_sym == :imperial)
@unit_system = imperial ? :imperial : :metric
@weight = attribute_from_metric_or_imperial(grams_or_ounces, Mass, :grams, :ounces)
@value = Package.cents_from(value)
@quantity = quantity > 0 ? quantity : 1
@sku = options[:sku]
@hs_code = options[:hs_code]
@options = options
end
Value is the item cost, thats how I understand this.
If using USPS carrier, the error can make in this place:
def self.size_code_for(package)
if package.inches(:max) <= 12
'REGULAR'
else
'LARGE'
end
end
Thanks!
I think you need to be using the
Package
module instead of thePackageItem
module (which doesn't appear to have quantity, so you'll have to duplicate yourPackage
objects for higher quantities).See also this note from the documentation of
PackageItem
: (http://www.rubydoc.info/github/Shopify/active_shipping/ActiveMerchant/Shipping/PackageItem)