对于我的问题得到-1,我感到非常惊讶。它们并不简单,它们很复杂。
我的line_items表有product_id cart_id order_id
每当客户点击产品时,它都会被添加到购物车中。
但我的公寓,汽车,旅游套餐不是产品。公寓告诉我,无论谁想到我能以某种方式连接我的汽车产品。它们具有根本不同的属性。当客户点击公寓并选择2卧室时,我们可以说如何添加到line_items我的apartment_id或car_id或tour_id。我不需要关于STI或多重继承的理论。我需要完全回答。感谢rails专家。
答案 0 :(得分:2)
首先,你应该格式化关于SO
指南的问题,这可能是因为你得到了投票...
无论如何,我认为你正在寻找polymorphic associations。
假设Product
是您商店中可用的产品,而LineItem
代表订单中的产品:
class LineItem < ActiveRecord::Base
has_one :product # ONE LineItem references ONE product in the shop
belongs_to :cart # respectively belongs_to :order
end
class Cart < ActiveRecord::Base
has_many :line_items # ONE Cart HAS MANY LineItems
end
class Product < ActiveRecord::Base
belongs_to :buyable, :polymorphic => true
# here you would have general attributes representing a product, e.g. 'name'
end
class Car < ActiveRecord::Base
has_one :product, :as => :buyable
# here you would have specific attributes in addition to the general attributes in
# product, e.g. 'brand'
end
class Apartment < ActiveRecord::Base
has_one :product, :as => :buyable
# here you would have specific attributes in addition to the general attributes in
# product, e.g. 'address'
end
为了完成这项工作,您的products
表必须有两列
因此,在您的代码中,您可以通过
检查您的产品究竟是什么@product = Product.find(params[:id])
if @product.buyable.is_a? Car
puts @product.buyable.brand
elsif @product.buyable.is_a? Apartment
puts @product.buyable.address
end