我正在使用我的导轨应用中的员工评论部分。到目前为止,有7个类别被审查,这意味着我需要对每个类别进行评级和评论。Rails最佳实践:另一个模型或更多模型领域?
是否有更好的方法是让每个分类评级和评论都有一个字段的Review模型?还是应该有两种模式 - 评分模式和评论模式,其中评论模式has_many评级,以及评级所属的评级?我试着记住,我可能会在未来添加,更改或删除评论类别。
谢谢!
我正在使用我的导轨应用中的员工评论部分。到目前为止,有7个类别被审查,这意味着我需要对每个类别进行评级和评论。Rails最佳实践:另一个模型或更多模型领域?
是否有更好的方法是让每个分类评级和评论都有一个字段的Review模型?还是应该有两种模式 - 评分模式和评论模式,其中评论模式has_many评级,以及评级所属的评级?我试着记住,我可能会在未来添加,更改或删除评论类别。
谢谢!
可以说这是一个数据建模最佳实践问题,而不仅仅是一个最佳实践问题。在不了解您的问题域的情况下,很难给出100%准确的答案。
最大的灵活性来自多模型方法。将来添加(或删除)类别会更容易。但是,如果您希望这些表中的条目数量非常大,则可以从单一模型方法中获得更好的性能。
如果你想正常化,那么肯定是另一张表。我有一个评论模型和类别模型(Review has_many :categories
),但我不熟悉您的问题域。但是,如果下次对8类人员进行审核,如果您有单独的表格,那么添加人员是不容易的。
请记住保留它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
是的。有一个单独的类型对象是有意义的。本来我认为这个类别只是评级模型中的一个额外领域。您可以详细了解我的评论模型和评分模型的原始结构不是干的吗?审核模式只会保留主管编号和审核日期。 – NicSlim 2011-06-13 17:51:48
如果这将是微不足道的增加新后来的领域(不是很多改变控制/文书工作等),我只是去与领域。
如果你需要使它灵活增加新的类别而无需修改代码,那么你就需要有3种型号:
Review
has_many :ratings
Category
has_many :ratings
Rating
belongs_to :review
belongs_to :category
商店类别的Category
名称和Rating
数值
使用类别类型表可轻松添加新类别(只需在类型表中添加新行)。假设参照完整性设置正确,删除类别也很容易:只需删除该类别类型即可。 – BryanH 2011-06-13 17:37:45
谢谢。我完全错过了添加类别模型的步骤。你会考虑多少条目? – NicSlim 2011-06-13 17:53:15
@NicSlim“大量条目”阈值最终取决于您使用的数据库品牌,访问数据库的并发用户数量以及承载数据库的硬件功能。如果你正在测量成千上万的条目数量,你可能没问题。数十万,可能不是。 – 2011-06-13 18:23:03