2012-02-26 59 views
2

我有都涉及幾個非常簡單的問題,我不認爲保證每個2索引合適嗎?

  1. 獨立後,如果我有一個用戶模型(設計GEM)同時包含「用戶名」和「電子郵件「屬性,而且都是獨一無二的,我是否將add_index添加到他們兩個或只有一個?對於這個特定的表,只需要一個鍵作爲外鍵,我只是不知道我是否應該爲它們添加_index。

  2. 我該如何重新排序在我的表單前端發生的驗證?現在,用戶名的驗證信息在底部,但是它是表單中的第一個字段,所以它們應該位於頂部。這是在我添加領域的設計寶石之後,所以即時猜測設計驗證運行在我之前。

  3. 它是否不願意編輯設計寶石的數據庫遷移文件,或者我應該爲每個變更做軌道遷移?我的應用尚未投入生產,但我剛剛看到一些教程,其中大家都推薦這一步。

回答

1

(1)該索引將用於從Users表中查找行,因此如果您要通過電子郵件查找用戶,則可以添加電子郵件索引以及用戶名。否則,用戶名單應該沒問題。

(3)是的,編輯一個已經運行的遷移文件是不可取的,因爲它很難跟蹤更改,並且最終可能會導致只能回滾編輯過的部分。因此,無論何時需要進行數據庫更改,都應該創建新的遷移。但是,由於您的應用程序尚未投入生產,具體取決於您擁有多少數據,因此這樣做可能沒有太大的危害。你的來電。

+0

如果您需要通過電子郵件保證唯一性,即使您不打算查詢,也應在該字段上添加唯一索引。 – Russell 2012-02-26 16:04:29

+0

同意。 @Russell是對的,如果你需要在桌子上強加這個條件,你應該添加一個唯一索引。 – Sebi 2012-02-26 16:14:30

+0

謝謝,優秀的答案! – Tallboy 2012-02-27 06:16:14

1

對1:這取決於你想要成爲多麼嚴謹,以什麼方式。一方面,既然在兩個字段上添加一個唯一的約束/索引非常便宜且容易(我假設傳統的SQL模式),爲什麼不呢?另一方面,一些rails純粹主義者認爲(有充分的理由),您應該放棄任何數據庫供應商的具體情況,並在rails模型中強制執行所有約束,然後添加索引(而不是約束)作爲性能優化。我是舊的skool,所以我更喜歡前者,但我也是純粹主義者,所以我確保我的rails模型是正確的,我的應用程序從不依賴於數據庫供應商的具體細節。

2:我會處理驗證錯誤顯示在視圖層,即不要掛上它們運行的​​順序 - 將所有驗證視爲原子操作。然後,在視圖中,而不是隻按照它們碰巧的順序轉儲錯誤消息,重新排序哈希,甚至顯式測試並輸出每個鍵。它的可維護性稍差,因爲如果添加新輸入,則需要更新該視圖代碼。但是,這與嘗試維持驗證運行順序的頭痛相比是微不足道的。就我個人而言,我不相信錯誤信息的打印順序甚至是相關的,但我知道是以一種錯誤的方式磨擦了一些人。

3:同意Sebi,不要編輯寶石或任何寶石提供的東西,也不要追溯編輯遷移。添加一個新的遷移是微不足道的,所以只需要做,然後轉移到有趣的東西上。如果我是一個不在生產環境中的應用程序的唯一程序員,我會採取快捷方式,但只要它活着或者有另一個開發人員,我就會更加自律。而且,我花更多的時間來編寫rails,我發現編寫rails db遷移就像SQL一樣容易或容易。

+0

謝謝,這是非常有幫助的。作爲第二個問題的旁註,我如何重新排列散列?我對此很陌生。 <%= devise_error_messages! %> – Tallboy 2012-02-27 06:17:43