2011-06-13 61 views
2

我正在使用我的导轨应用中的员工评论部分。到目前为止,有7个类别被审查,这意味着我需要对每个类别进行评级和评论。Rails最佳实践:另一个模型或更多模型领域?

是否有更好的方法是让每个分类评级和评论都有一个字段的Review模型?还是应该有两种模式 - 评分模式和评论模式,其中评论模式has_many评级,以及评级所属的评级?我试着记住,我可能会在未来添加,更改或删除评论类别。

谢谢!

回答

3

可以说这是一个数据建模最佳实践问题,而不仅仅是一个最佳实践问题。在不了解您的问题域的情况下,很难给出100%准确的答案。

最大的灵活性来自多模型方法。将来添加(或删除)类别会更容易。但是,如果您希望这些表中的条目数量非常大,则可以从单一模型方法中获得更好的性能。

+0

使用类别类型表可轻松添加新类别(只需在类型表中添加新行)。假设参照完整性设置正确,删除类别也很容易:只需删除该类别类型即可。 – BryanH 2011-06-13 17:37:45

+0

谢谢。我完全错过了添加类别模型的步骤。你会考虑多少条目? – NicSlim 2011-06-13 17:53:15

+0

@NicSlim“大量条目”阈值最终取决于您使用的数据库品牌,访问数据库的并发用户数量以及承载数据库的硬件功能。如果你正在测量成千上万的条目数量,你可能没问题。数十万,可能不是。 – 2011-06-13 18:23:03

1

如果你想正常化,那么肯定是另一张表。我有一个评论模型和类别模型(Review has_many :categories),但我不熟悉您的问题域。但是,如果下次对8类人员进行审核,如果您有单独的表格,那么添加人员是不容易的。

2

请记住保留它DRY。如果您有多个模型完全相同(评级+类别评论),使用相同的控制器和视图,则您的代码为而非DRY

您可以轻松制作一个模型(以及控制器和视图),为每个类别对象分配类型。所以说你的类别是["On Time", "Dresses neatly", "Keeps desk clean"]现在你将每个类型作为你的模型的类型。

事实上,我会做的分类表中的三路连接

Category belongs_to [Type, User, Supervisor]

分类包括评级和评论。

因此,这里的分类对象可能是什么样子:

id: 203 
type_id: 2 
rating: 4 
comment: "Seems to get to work on time, 
      but usually late coming back from lunch" 
user_id: 2 
supervisor_id: 1 
created_at: (whatever) 
updated_at: (whatever) 

你有你的类型的对象

id: 2 
name: "On Time" 

你的用户对象

id: 1 
name: Dick Jones 
supervisor_id: null 

id: 2 
name: Clarence J. Boddicker 
supervisor_id: 1 
+0

是的。有一个单独的类型对象是有意义的。本来我认为这个类别只是评级模型中的一个额外领域。您可以详细了解我的评论模型和评分模型的原始结构不是干的吗?审核模式只会保留主管编号和审核日期。 – NicSlim 2011-06-13 17:51:48

2

如果这将是微不足道的增加新后来的领域(不是很多改变控制/文书工作等),我只是去与领域。

如果你需要使它灵活增加新的类别而无需修改代码,那么你就需要有3种型号:

Review 
    has_many :ratings 

Category 
    has_many :ratings 

Rating 
    belongs_to :review 
    belongs_to :category 

商店类别的Category名称和Rating数值