Rails最佳实践:另一个模型或更多模型字段?

时间:2011-06-13 17:15:21

标签: ruby-on-rails model

我正在使用rails应用中的员工审核部分。到目前为止,有7个类别被评论,这意味着我想要对每个类别进行评级和评论。

让一个评论模型包含每个类别评级和评论的字段会更好吗?或者我应该有两个模型 - 评级模型和评论模型,其中评论模型具有多个评级,评级属于哪个评论?我想要记住,我可能会在将来添加,更改或删除审核类别。

谢谢!

4 个答案:

答案 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个类别进行审核,如果你有一个单独的表格,那么添加一个类别是没有意义的。