我正在制作一个应用程序,让人们列出他们想要出售的食品。他们列出了Dishes(Dish模型),当人们购买它时,会创建一个Order记录。
我希望人们能够在Dishes购买后提交评论,并查看订单(订单涉及与此人会面)。
我想知道我是否可以创建一个Review模型,如下所示:
class Review < ActiveRecord::Base
belongs_to :dish
belongs_to :order
end
我觉得这不对。对菜肴的评论和对订单的评论将有不同的领域,可能是一种完全不同的逻辑,但在同一时间点它的相同的想法&#34;所以我认为最好只为它创建一个模型。
以上是否正确?
由于
答案 0 :(得分:1)
这是单表继承(STI)的设计用例。当大多数值在两个模型之间共享时,STI可以让您从另一个模型继承它们。 E.g:
class Review < ActiveRecord::Base; end
class DishReview < Review
belongs_to :dish
end
class OrderReview < Review
belongs_to :order
end
然后,您将审阅类型存储在新的type
列中,ActiveRecord会将它们存储在同一reviews
表中。评论表将需要外国菜单和订单。
如果这些评论类型可能有很大分歧......说你想要对菜肴评论,速度和友好性等添加辣味和甜味等等,对于订单评论......那么开始更有意义使用单独的表,一个用于DishReview,另一个用于OrderReview。然后,您可以使用模块,服务,关注点等在它们之间共享逻辑。您还可以在Review表中存储公共数据,并将DishReview和OrderReview链接与之一对一。