來自this後&它說DB處理的參照完整性根本不是Rails方式。Rails 3中的Postgresql參照完整性約束條件
但想一想:
class User < ActiveRecord::Base
belongs_to :department
end
class Department < ActiveRecord::Base
has_many :users
end
#User Model
id: integer, name: string,department_id: integer
#Department Model
id: integer, name: string
在這裏,我需要創建一個新的用戶&強制執行以下規則
- 用戶應該被分配到一個部門
- 的
users.department_id
應該匹配departments.id
- if
users.department_id
與不匹配,不應創建記錄&提出錯誤。
現在,我該如何在rails方式下完成這項工作?或者通過在遷移中刪除原始SQL來添加外鍵是唯一的方法嗎?允許保存操作之前
validates_presence_of :department
Rails會檢查是否有一個有效的部門:
的‘Rails的方式’掛鉤是頭腦簡單的,愚蠢的,並受競爭情況(其他中事情)。如果你關心你的數據,你會在數據庫中使用真正的FK,[外國人](https://github.com/matthuhiggins/foreigner)會幫助你,直到Rails開始改變態度,良好的感覺。 –
是的,它似乎很奇怪,但嘿,鐵軌是一個固執己見的軟件:) – CuriousMind
但是他們的邏輯有漏洞,他們讓他們的態度得到堅實的軟件的方式。至少他們承認他們在[驗證指南](http://guides.rubyonrails.org/active_record_validations_callbacks.html#why-use-validations)中唯一性的缺點。我已經看到了足夠*不可能*事情發生得更好,我至少和Rails一樣被認爲是:) –