2011-08-18 52 views
0

我是新手,我有一個關於如何在我的模型關聯上強制執行自定義規則的問題。如何在ActiveRecord協會中實施包含規則

例如,假設我有:

class Person < ActiveRecord::Base 
    belongs_to :organization 
end 

class Organization < ActiveRecord::Base 
    has_many :people 
end 

,現在假設我只想讓Organization.people << Person.new(...)命令執行成功,如果新Person對象是與先前加入到Organization其他people兼容。這將需要在所有現有的Organization.people元素上運行驗證檢查,並決定是否可以添加新的Person

在我看來,我可以通過覆蓋所有Organization.people賦值操作符(如<<=)並將驗證邏輯放入覆蓋例程來完成此操作。

這是完成這個最好的方法嗎?

謝謝!

回答

0

我想你可以在Person類中進行驗證。它會對self.organiation.people中的其他人進行測試。我不知道我是否會覆蓋很多關係上的< <,因爲如果您決定創建Person.new(:organization => some_org)這樣的人,您的覆蓋將不會被使用。如果驗證存在於Person類中,無論您如何創建該人員,它都會得到練習。

+0

我明白你的意思了。但是,這個決定確實屬於組織類。人員類別不應決定由誰組織的人員 - 這應該由組織決定。因此,我想我會建議觸發Person類的驗證(即通過對組織進行驗證),但驗證只會通過調用Organization類中的決策功能將決策委託給組織。謝謝。 – Denis

+0

是的,我同意。你可以很容易地得到一個驗證:等等,然後做一個委託:等等。 –