审查模型 - 在两个不同的其他模型之间共享

Review model - shared across two different other models

我正在制作一个应用程序,可以让人们列出他们想要出售的食品。他们列出菜肴(菜肴模型),当人们购买它时,会创建一个订单记录。

我希望人们能够在已购买菜肴的情况下提交评论,并查看订单(订单涉及与人会面)。

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

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

我觉得这样不对。 Dishes 上的评论和 Orders 上的评论将有不同的领域,并且可能是完全不同的逻辑,但在同一时间点它是相同的 "idea" 所以我认为最好只创建一个模型它。

以上是否正确?

谢谢

这是为单一 table 继承 (STI) 设计的用例。当大部分值在两个模型之间共享时,STI 可以让您从另一个模型继承它们。例如:

class Review < ActiveRecord::Base; end

class DishReview < Review
  belongs_to :dish
end

class OrderReview < Review
  belongs_to :order
end

然后您将评论类型存储在新的 type 列中,ActiveRecord 处理将它们存储在相同的 reviews table 中。评论 table 需要菜品和订单的外键。

如果这些评论类型可能有很大差异...说你想在菜品评论中添加辣度和甜度等,在订单评论中添加速度和友好度等...那么它更有意义从单独的 table 开始,一个用于 DishReview,另一个用于 OrderReview。然后,您可以使用模块、服务、关注点等在它们之间共享逻辑。您还可以将公共数据存储在 Review table 中,并使 DishReview 和 OrderReview link 与之一对一。