2010-12-16 89 views
10

我想向Rails模型添加一個方法,用於測試。如果我這樣做Ruby/Rails:重新打開vs覆蓋類

class Model 
    def something_new 
    do_something 
    end 
end 

在Rails控制檯或在運行時加載的文件中,模型被覆蓋而不是修改。如果我在上面的行之前放置了類似v = Model.class的東西,則新方法已成功添加到現有類中。顯然,需要參考信號表明現有的課程正在重新開放。

另一方面,可以添加一個方法,比如Fixnum,而不必先引用它。這裏發生了什麼,以及確保現有類被重新打開和修改而不是被覆蓋的常用方法是什麼?

謝謝。

回答

11

聽起來好像你在使用它之前不需要這個類。當您編寫Model.class並且沒有Model類時,Rails將自動爲您引入Model。如果你只寫class Model,它只是把它看作一個類的定義。只要做require 'model'應該可以工作。

+0

謝謝,這是問題所在。當我看到模型類已經被識別時,我沒有意識到它只是「自動」識別的。 – 2010-12-16 19:45:39

4

使用class_eval,這樣你將會以正確的方式重新開課。
這是關於reopening classes的一篇非常好的文章。

+0

謝謝。這是一篇很好的文章。 – 2011-02-04 13:33:31