审核模型 - 在两个不同的其他模型中共享

时间:2015-06-04 23:26:41

标签: ruby-on-rails associations models

我正在制作一个应用程序,让人们列出他们想要出售的食品。他们列出了Dishes(Dish模型),当人们购买它时,会创建一个Order记录。

我希望人们能够在Dishes购买后提交评论,并查看订单(订单涉及与此人会面)。

我想知道我是否可以创建一个Review模型,如下所示:

class Review < ActiveRecord::Base
    belongs_to :dish
    belongs_to :order
end

我觉得这不对。对菜肴的评论和对订单的评论将有不同的领域,可能是一种完全不同的逻辑,但在同一时间点它的相同的想法&#34;所以我认为最好只为它创建一个模型。

以上是否正确?

由于

1 个答案:

答案 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链接与之一对一。