Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 如何创建自定义运费-Spree_Ruby On Rails 4_Spree - Fatal编程技术网

Ruby on rails 4 如何创建自定义运费-Spree

Ruby on rails 4 如何创建自定义运费-Spree,ruby-on-rails-4,spree,Ruby On Rails 4,Spree,我拥有的是一个拥有多个不同用户角色的网站。通常只有管理员和用户。我有多个不同的用户零售,贸易等 客户想要的是,每种产品都有单独的运输成本。用户的实际成本有所不同,因此贸易运费可能为8美元,零售费为10美元。如果选择了多个产品,第一个产品将100%发货,每增加一个产品将有50%发货。此价格因客户装运地点而异。根据物品的类别也有所不同,例如,它们有座位类别和鱼缸类别。座位类别可能是15美元,鱼缸可能是17美元 我的想法是,每个类别都有自己的装运类别,然后装运方法就是位置。这可以很好地工作,但棘手的部

我拥有的是一个拥有多个不同用户角色的网站。通常只有管理员和用户。我有多个不同的用户零售,贸易等

客户想要的是,每种产品都有单独的运输成本。用户的实际成本有所不同,因此贸易运费可能为8美元,零售费为10美元。如果选择了多个产品,第一个产品将100%发货,每增加一个产品将有50%发货。此价格因客户装运地点而异。根据物品的类别也有所不同,例如,它们有座位类别和鱼缸类别。座位类别可能是15美元,鱼缸可能是17美元

我的想法是,每个类别都有自己的装运类别,然后装运方法就是位置。这可以很好地工作,但棘手的部分是如何根据用户登录的内容进行调整。我所给出的价格与零售航运和贸易航运之间的差异一致。贸易航运始终是零售航运的80%

基本上,如果我能找到在哪里进行运输计算,那就太好了。这样,我可以测试用户是否是交易客户,并将值更改为实际值*.80,否则该值为正常值

如果你们中有人能抽出时间帮我解决这个问题,我将不胜感激

基本上,如果我能找到 运费计算完成

计算是在Spree::Calculator::Shipping classes FlatRate、“PerItem”等中完成的。请检查

您可能需要自定义计算器或装饰现有方法,因此在models/spree/calculator/shipping/my_custom_method.rb中添加文件:

基本上,如果我能找到 运费计算完成

计算是在Spree::Calculator::Shipping classes FlatRate、“PerItem”等中完成的。请检查

您可能需要自定义计算器或装饰现有方法,因此在models/spree/calculator/shipping/my_custom_method.rb中添加文件:


好的,这就是我到目前为止的情况

应用程序内/models/spree/calculator/shipping/per_item.rb 我从\vendor\bundle\ruby\1.9.1\gems\Spree\u core-2.4.7\app\models\Spree\calculator\shipping\per\u item.rb复制的Spree标准模型

require_dependency spree/shipping_calculator

module Spree
  module Calculator::Shipping
    class PerItem < ShippingCalculator
    preference :amount, :decimal, default: 0
    preference :currency, :string, default: ->{ Spree::Config[:currency] }

  def self.description
    Spree.t(:shipping_flat_rate_per_item)
  end

  def compute_package(package)
    if package.contents.sum(&:quantity) > 1
      compute_from_multiple(package.contents.sum(&:quantity))
    else
      compute_from_single(package.contents.sum(&:quantity))
    end
  end

  def compute_from_multiple(quantity)
    (self.preferred_amount / 2) + ((self.preferred_amount * quantity) / 2
  end

  def compute_from_single(quantity)
    self.preferred_amount * quantity
  end

end
这会产生一个错误:

 undefined local variable or method `spree_current_user'

有人知道如何检查模型中的当前用户吗?

好的,到目前为止我已经知道了

应用程序内/models/spree/calculator/shipping/per_item.rb 我从\vendor\bundle\ruby\1.9.1\gems\Spree\u core-2.4.7\app\models\Spree\calculator\shipping\per\u item.rb复制的Spree标准模型

require_dependency spree/shipping_calculator

module Spree
  module Calculator::Shipping
    class PerItem < ShippingCalculator
    preference :amount, :decimal, default: 0
    preference :currency, :string, default: ->{ Spree::Config[:currency] }

  def self.description
    Spree.t(:shipping_flat_rate_per_item)
  end

  def compute_package(package)
    if package.contents.sum(&:quantity) > 1
      compute_from_multiple(package.contents.sum(&:quantity))
    else
      compute_from_single(package.contents.sum(&:quantity))
    end
  end

  def compute_from_multiple(quantity)
    (self.preferred_amount / 2) + ((self.preferred_amount * quantity) / 2
  end

  def compute_from_single(quantity)
    self.preferred_amount * quantity
  end

end
这会产生一个错误:

 undefined local variable or method `spree_current_user'
有人知道如何检查模型中的当前用户吗?

我想你可以检查package.order.user,如果是零-你的买家是匿名的。我想你可以检查package.order.user,如果是零-你的买家是匿名的。
 undefined local variable or method `spree_current_user'