2011-06-13 89 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數值