3

我基本上想要以下功能,但反过来,我已经有了undestroy适用于单个类的功能。

https://github.com/rails/rails/blob/2ad168ee41d590bd9a4d15eddf3c2f719c23b60a/activerecord/lib/active_record/relation.rb#L364

但是,我试图扩展 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 []>

4

1 回答 1

8

当您调用时,您将这些方法ActiveRecord::Relation.extend Track::TrackRelation混合为类方法。Track::TrackRelationActiveRecord::Relation

您想要做的是混合使用与实例方法相同的方法。您可以使用include而不是extend. 不过Module#include是私人的。因此,实现您想要的一种方法是:

ActiveRecord::Relation.send(:include, Track::TrackRelation)
于 2013-07-30T13:03:07.440 回答