Rails中产品的复杂定价

时间:2012-02-15 09:49:49

标签: ruby-on-rails e-commerce

Rails新手在这里,所以当你看到我遇到的问题时,请不要过多地敲打你的脑袋(它可能应该是直截了当的!)

我正在开发一款应用程序,客户可以根据产品(VPS)进行销售。虽然实际产品的数量很少,但它们是高度可配置的,定价取决于几个因素:

  • Ram / HDD Size
  • 服务器的位置(也可能更改货币)
  • 任何产品'附加组件'。

我遇到的问题是我实际上如何实施定价(从各种因素中产生价格以添加到用户服务中) - 并且在与人们交谈后他们给了我不同的答案让我更加困惑。

如果有帮助,我的模型就像这样:

class Product < ActiveRecord::Base
  has_many :services
  has_many :prices
  has_many :addons
  belongs_to :product_cat
end

class Service < ActiveRecord::Base
  belongs_to :product
  belongs_to :user
  belongs_to :location
end 

class Location < ActiveRecord::Base
  has_one :currency
  has_many :services
end

任何帮助将不胜感激。 欢呼声。

1 个答案:

答案 0 :(得分:1)

首先,我认为你应该花一些时间来思考一下你的数据库结构。 您在产品和服务之间有什么样的关系?

据我所知,产品可以提供多种服务,并且可以为多种产品提供服务。这听起来像是对我的n-m关联。 如果是这样的话,你应该像这样设置你的表:

class Product < ActiveRecord::Base
  has_many :product_services
  has_many :services, through: :product_services
  has_many :prices
  has_many :addons
  belongs_to :product_cat
end

class ProductServices < ActiveRecord::Base
  belongs_to :product
  belongs_to :service
end

class Service < ActiveRecord::Base
  has_many :product_services
  has_many :products, through: :product_services
  belongs_to :user
  belongs_to :location
end 

class Location < ActiveRecord::Base
  has_one :currency
  has_many :services
end

通过这种设置,获得产品的价格应该非常简单。 如果您的产品具有基本价格,并且您的所有服务都有价格,则产品的总价格是基本价格和所有单个服务价格的总和。 现在您已经建立了关联,您可以使用以下方法访问它们:

product.services # returns all of the services for the specific product.
product.services.sum(:price) # returns the sum of all the individual prices of each service.

我希望这有助于您实施定价解决方案。这可能是一个复杂的问题,但Rails提供了许多方法来使它更容易。作为旁注,您应该真正了解active_record文档,它充满了让您的生活更轻松的信息。

干杯!