2011-12-29 41 views
2

我有一堆目前擴展ActiveRecord :: Base的模型。如何擴展「保存!」方法在ActiveRecord?

對於所有這些模型,我想擴展save!方法的一些附加功能。例如,

def save! 
    begin 
    super 
    rescue 
    # additional exception handling logic 
    end 
end 

什麼是以OOP方式做到這一點的理想方法?

我試過子類化ActiveRecord(MyActiveRecord)並在子類中使用了上面的代碼。然後我使用這個子類作爲我所有模型的父類。但是,ActiveRecord試圖找到myapp_test.my_active_records表。

是否有一個更優雅的方式使用模塊實現相同的事情?

+0

我會盡量按照您的描述。 – 2011-12-29 10:08:15

+0

我應該更清楚 - OOP結構應該是什麼樣子? – deruse 2011-12-29 10:18:34

+0

你是什麼意思? – 2011-12-29 10:20:47

回答

1

如果你標記一個類爲抽象:

class Foo < ActiveRecord::Base 
    self.abstract_class = true 
end 

那麼你可以從它繼承和Rails不會去尋找一個FOOS表。

在這種特殊情況下,我不會覆蓋保存 - 雖然已經有一組回調(around_save,around_update等),可能更有意義。

即使您要通過覆蓋保存方法來做到這一點,將覆蓋保存方法放在模塊中並將該模塊包含在需要它的類中也可能更有意義。

module MySave 
    def save! 
    super 
    rescue 
    ... 
    end 
end 

class MyClass < AR::Base 
    include MySave 
end