我正在使用rails应用中的员工审核部分。到目前为止,有7个类别被评论,这意味着我想要对每个类别进行评级和评论。
让一个评论模型包含每个类别评级和评论的字段会更好吗?或者我应该有两个模型 - 评级模型和评论模型,其中评论模型具有多个评级,评级属于哪个评论?我想要记住,我可能会在将来添加,更改或删除审核类别。
谢谢!
答案 0 :(得分:3)
可以说,这是一个数据建模最佳实践问题,而不仅仅是铁路最佳实践问题。如果不了解更多有关您的问题域的信息,很难给出100%准确的答案。
最灵活的来自多模型方法。将来添加(或删除)类别会更容易。但是,如果您希望这些表格中包含大量条目,则可以通过单一模型方法获得更好的性能。
答案 1 :(得分:2)
请记住保持 DRY 。如果您有多个模型执行完全相同的操作(评级+对类别的评论),使用相同的控制器和视图,那么您的代码不是DRY 。
您可以轻松制作一个模型(以及控制器和视图),为每个类别对象指定类型。所以说你的类别是["On Time", "Dresses neatly", "Keeps desk clean"]
现在你可以将它们作为模型的类型。
事实上,我将Category表格设为三向连接
Category belongs_to [Type, User, Supervisor]
类别包括评级和评论。
所以这是Category对象的样子:
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
答案 2 :(得分:2)
如果稍后添加新字段会很简单(不是很多变更控制/文书工作等),我只会选择字段。
如果您需要灵活地添加新类别而不更改代码,那么您需要有3个模型:
Review
has_many :ratings
Category
has_many :ratings
Rating
belongs_to :review
belongs_to :category
将类别名称存储在Category
中,将数值存储在Rating
答案 3 :(得分:1)
如果你想标准化,那么肯定是另一张桌子。我有一个评论模型和类别模型(Review has_many :categories
),但我不熟悉您的问题域。但是,如果下次有人对8个类别进行审核,如果你有一个单独的表格,那么添加一个类别是没有意义的。