2009-05-27 14 views
2

我有一個允許屬性爲null的模型,但是當讀取null屬性時,我想採取特殊的操作。特別是,我想拋出一些例外。也就是說,就像如何包裝所有ActiveRecord屬性訪問器

class MyModel < ActiveRecord::Base 
    def anAttr 
     read_attribute(:anAttr) or raise MyException(:anAttr) 
    end 
end 

這一切都很好,但這意味着我必須爲每個屬性手動編碼相同的自定義訪問器。

我想我可以重寫read_attribute,但是我的覆蓋的read_attribute從來沒有被調用過。

+1

我真的要問爲什麼。你在這裏的用例是什麼?當然有更好的方法。 「例外情況是出於特殊情況。」無似乎並不罕見。 – 2009-05-28 04:33:50

回答

4

不知道爲什麼你需要做到這一點,但很可惜:

def get(attr) 
    val = self.send(attr) 
    raise MyException unless val 
    val 
end 

@object.get(:name) 
1

這很有趣,我們今天看這個同樣的事情。檢查attribute_method.rb這是屬性存在的所有Rails邏輯的位置。你會看到一個define_attribute_methods方法,你應該可以覆蓋。最後,我認爲我們將以不同的方式做到這一點,但這是一個有益的練習。

相關問題