我有一堆模型,目前扩展了ActiveRecord :: Base。
对于所有这些模型,我想扩展save!
方法并增加一些功能。例如,
def save!
begin
super
rescue
# additional exception handling logic
end
end
以OOP方式实现这一目标的理想方式是什么?
我尝试了继承ActiveRecord(MyActiveRecord)并在子类中使用上面的代码。然后我使用子类作为我所有模型的父类。但是,ActiveRecord尝试找到表myapp_test.my_active_records。
使用可以实现相同目标的模块是否有更优雅的方式?
答案 0 :(得分:1)
如果您将类标记为抽象:
class Foo < ActiveRecord::Base
self.abstract_class = true
end
然后你可以从它继承,rails不会去寻找foos表。
在这种特殊情况下,我不会覆盖保存 - 已经有一组回调(around_save
,around_update
等)可能更有意义。
即使您是通过覆盖save方法来实现的,通过将覆盖的保存方法放在模块中并将该模块包含在需要它的类中来实现它也更有意义。
module MySave
def save!
super
rescue
...
end
end
class MyClass < AR::Base
include MySave
end