是的,这是另一个与比萨饼类比的数据库问题。我看到的那些似乎没有正确点击,所以这里。
我需要能够在一个订单中订购多个带有任意数量浇头的比萨饼。它是一种基本的购物车模式,但浇头使其难以实施。
基本模型是,
class Pizza < ActiveRecord::Base
has_and_belongs_to_many :orders
has_and_belongs_to_many :toppings
end
class Topping < ActiveRecord::Base
has_and_belongs_to_many :pizzas
end
比萨饼和浇头表用作可订购的比萨饼和浇头类型信息的持有者。
class OrdersPizzas < ActiveRecord::Base
belongs_to :order
belongs_to :pizza
end
class PizzasToppings < ActiveRecord::Base
belongs_to :topping
belongs_to :pizza
end
class Order < ActiveRecord::Base
has_and_belongs_to_many :pizzas
end
[添加]
澄清一下,数据库设计是为购物应用程序设计的,因此管理员能够设置“菜单”,并且用户能够看到菜单并从中订购是必不可少的。
这个操作分为两个步骤,首先你需要通过创建比萨饼和浇头来制作菜单,并将它们关联起来,并不是所有的比萨饼都可以有所有的浇头。
奶酪披萨可以有额外的橄榄和额外的奶酪作为配料
意大利辣香肠披萨只能有额外的奶酪作为配料
第二步实际上是根据输入的数据下订单,因此都是多对多。
现在的问题是,输入上面的数据后,我要下单
意大利辣香肠披萨加额外的奶酪
芝士披萨加额外的橄榄
在一个订单中,它应该如何设计?
我能想到的就是添加一个
class OrdersPizzasToppings < ActiveRecord::Base
belongs_to :orders_pizzas
belongs_to :topping
end
所以我可以区分哪个披萨有浇头,但这看起来不是正确的方法。