【发布时间】:2011-06-14 01:39:19
【问题描述】:
我正在我的 rails 应用程序中处理员工审查部分。到目前为止,有人对 7 个类别进行了审核,这意味着我想要对每个类别进行评分和评论。
拥有一个包含每个类别评分和评论字段的评论模型会更好吗?或者我应该有两个模型 - 一个评级模型和一个评论模型,其中评论模型有_许多评级,以及评级属于_评论?我试图记住,我将来可能会添加、更改或删除评论类别。
谢谢!
【问题讨论】:
标签: ruby-on-rails model
我正在我的 rails 应用程序中处理员工审查部分。到目前为止,有人对 7 个类别进行了审核,这意味着我想要对每个类别进行评分和评论。
拥有一个包含每个类别评分和评论字段的评论模型会更好吗?或者我应该有两个模型 - 一个评级模型和一个评论模型,其中评论模型有_许多评级,以及评级属于_评论?我试图记住,我将来可能会添加、更改或删除评论类别。
谢谢!
【问题讨论】:
标签: ruby-on-rails model
可以说这是一个数据建模最佳实践问题,而不仅仅是一个 Rails 最佳实践问题。如果不了解您的问题领域,很难给出 100% 准确的答案。
最大的灵活性来自多模型方法。将来添加(或删除)类别会更容易。但是,如果您希望这些表中有大量条目,则可以从单一模型方法中获得更好的性能。
【讨论】:
如果以后添加新字段很简单(不是很多变更控制/文书工作等),我会选择这些字段。
如果您需要在不更改代码的情况下灵活地添加新类别,那么您需要有 3 个模型:
Review
has_many :ratings
Category
has_many :ratings
Rating
belongs_to :review
belongs_to :category
将类别名称存储在Category 中,将数值存储在Rating 中
【讨论】:
记得保持干燥。如果您有多个模型做完全相同的事情(评级 + 类别上的 cmets),具有相同的控制器和视图,那么您的代码是not 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
【讨论】:
如果你想规范化,那么肯定是另一个表。我有一个 Review 模型和 Category 模型 (Review has_many :categories),但我不熟悉您的问题域。但是,如果下次对 8 个类别的人进行审核,那么如果您有单独的表格,则无需考虑添加一个。
【讨论】: