我來自數據庫模式儘可能完全定義的背景,例如字段長度,非null,默認值,複雜的參照完整性等。對於Rails,我必須在模型中完成所有這些操作才能獲得智能驗證。那麼我是否也複製了數據庫定義中的所有內容?對於Rails應用程序,我應該在數據庫以及模型中進行驗證嗎?
例如,如果電子郵件是必填字段,請將validates :email, :presence => true
添加到模型AND :null => false
以進行遷移嗎?
字符串呢?如果我在模型中有:length => { :maximum => 50 }
,我是否也希望:limit => 50
在遷移中?
難道我的外鍵添加到數據庫實施參照完整性?
或者是「Rails的方式」做盡可能多的模型和數據庫保持爲「啞巴」持久性引擎?
Re。最大長度,我假設由Rails創建的默認「vary(255)」使用與「vary(50)」相同的空間,只要存儲了50個字符即可。風險(至少在我的MS SQL 2000天)是,如果某人以某種方式添加更長的數據,字段長度的總和可能會超過最大行長度。 –
所有這三個答案都很有幫助。由於user458221首先回答並解決了所有問題,我會將其作爲答案進行檢查。聽起來就像在一個完美的Rails世界中,DB驗證不是必需的,但在現實世界中,額外的安全網是一個好主意。作爲個人喜好,我喜歡能夠查看架構以瞭解應用程序的基本業務規則。 –