我基本上想要以下函数,但反之,我已经将undestroy
函数用于单个类。
但是,我试图扩展ActiveRecord :: Relation无济于事。以下是我为ActiveRecord::Base
ActiveRecord::Base.extend Track::BaseTrack
但使用ActiveRecord::Relation.extend Track::TrackRelation
似乎没有做任何事情。模块TrackRelation
(在Track
内)是:
module TrackRelation
def undestroy_all(conditions = nil)
if conditions
where(conditions).undestroy_all
else
to_a.each {|object| object.undestroy }.tap { reset }
end
end
end
我是否使用正确的ActiveRecord类进行关系?
错误是:
undefined method "undestroy_all" for #<ActiveRecord::Relation []>
答案 0 :(得分:8)
当您致电ActiveRecord::Relation.extend Track::TrackRelation
时,您正在将Track::TrackRelation
方法混合到ActiveRecord::Relation
作为类方法。
您要做的是混合使用与实例方法相同的方法。您可以使用include
而不是extend
来执行此操作。但是Module#include
是私有的。因此,实现目标的一种方法是:
ActiveRecord::Relation.send(:include, Track::TrackRelation)