使用不同的产品类型向购物车添加商品

时间:2012-03-16 23:31:40

标签: ruby-on-rails ruby-on-rails-3

嗨开发者。我在向购物车添加商品时遇到问题。来自rails agile book。如果我想添加到具有不同属性的产品(公寓,汽车)

class Products
  has_many :line_items
  attributes :name, :price, :content
end

class LineItem
  belongs_to :products
  belongs_to :carts
end

class Cart
  has_many :line_items
end

class Car
  attributes :name, :car_type, :color
end

class Apartment
  attributes :name, :size, :location
end

class Order
  attr :buyer_details, :pay_type
end

客户将产品添加到购物车和e.x. 2间卧室出租,豪华轿车出租,想要支付。如何添加到购物车。如果我把apartment_id和car_id放到lineitems,它会被污染吗?我需要正确的方法,正确的做法。谢谢大家。

1 个答案:

答案 0 :(得分:1)

如果你肯定想在LineItems中保留所有关联,请查找多态关联。然后使LineItems成为产品,公寓和汽车的聚合物。但我认为你的设计真的很糟糕。购买和租赁是非常不同的。租赁时,您将有一个持续时间,一个地址或注册,不能重复预订。返回并处理您的ERD。

更好设计的一个选择:

NB 为了清晰起见,我已将LineItem更改为CartItem。

class Products
  has_many :cart_items
  has_many :order_items
  attributes :name, :price, :content
end


class Cart
  has_many :line_items
end
class CartItem
  belongs_to :products
  belongs_to :carts
end
class CartRental
  # :cart_rentable_type, :cart_rentable_id would be the fields for the polymorphic part
  belongs_to :cart_rentable, :polymorphic => true
  belongs_to :carts
  attributes :from, :till
end

class Order
  attr :buyer_details, :pay_type
end
class OrderItem
  belongs_to :products
  belongs_to :order
end
class Rental
  belongs_to :rentable, :polymorphic => true
  belongs_to :order
   # :rentable_type, :rentable_id would be the fields for the polymorphic part
  attributes :from, :till, :status
end


class Car
  attributes :name, :car_type, :color
  has_many :cart_rentals, :as => :cart_rentable
  has_many :rentals, :as => :rentable
end
class Apartment
  attributes :name, :size, :location
  has_many :cart_rentals, :as => :cart_rentable
  has_many :rentals, :as => :rentable
end