2012-02-29 75 views
1

在自定義的DataMapper設置器中,我想檢查我設置的值是否有效。我可以檢查單個DataMapper屬性的有效性嗎?

例如:

class ToastMitten 
    include DataMapper::Resource 

    property :id, Serial 
    property :wearer, Enum['Chuck Norris', 'Jon Skeet'] 
    property :first_worn_at, DateTime 

    def wearer=(name) 
    super 
    if wearer.valid? # How can I do this? 
     first_worn_at = Time.now 
    end 
    end 

end 

t = ToastMitten.new 
t.wearer = 'Nathan Long' # invalid value; do NOT set first_worn_at 
t.wearer = 'Jon Skeet' # valid value; set first_worn_at 

我可以查看單個屬性這樣的有效性,而不對對象本身調用valid?,並通過所有的錯誤找?

回答

2

我想這出自己,這裏是到目前爲止,我已經找到了最好的解決辦法:

雖然我還沒有發現檢查單屬性的有效性,在一個方法:

t.wearer.valid? 

我發現,您可以檢查保存之前整個對象的有效性,然後檢查是否有對你有興趣,像這樣的屬性的錯誤:

if t.valid? 
    # Everything is valid. 
else 
    # There were errors, let's see if there were any on the 'wearer' property... 
    puts t.errors.on(:wearer) 
end 

我知道這不一定是你所尋求的答案,但這是迄今爲止我所提出的最好的答案。如果我找到更好的東西,我會回覆。