2010-05-08 62 views
0

我有兩個或多個模型完全相同的自定義驗證方法。哪裏是放置這種驗證方法的最佳地點,以便兩種模型都可以訪問並保持乾燥?如果驗證失敗,我也想使用errors.add_to_base,所以無論這個方法放在哪裏,我都應該能夠適應這一點。Rails:跨多個模型的驗證,放在哪裏?

回答

0

在lib目錄中創建一個模塊,然後將其包含進來。您還可以創建一個父類,從中繼承模型並將其放在那裏,但對於簡單的事情來說,這看起來有點超過頂端。

0

最好的做法是創建一個自定義驗證器,該驗證器可以擴展ActiveModel::EachValidator(如果屬性驗證)或ActiveModel::Validator如果它有點複雜。

class DomainNameValidator < ActiveModel::EachValidator 

該文件應該駐留在app/validators/contact_address_validator以被rails自動加載。每個需要的是驗證可以指定

validates :name, uniqueness: true, domain_name: true 

其中關鍵部分是domain_name: true類。 _validator是不需要的。如您所見,您的自定義驗證器可以與其他Rails內置驗證器結合使用。