2013-07-30 83 views
3

我基本上想要以下功能,但相反,我已經有undestroy函數工作單個類。RoR擴展ActiveRecord ::關係與unsutroy_all

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

不過,我試圖延長的ActiveRecord ::關係無濟於事。下面是我如何做到這一點其他方法由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 []>

回答

7

當你調用ActiveRecord::Relation.extend Track::TrackRelation您在Track::TrackRelation方法混合到ActiveRecord::Relation作爲類方法。

你想要做的就是混合使用與實例方法相同的方法。你可以使用include而不是extend。但是Module#include是私人的。所以一種實現你想要的方法是:

ActiveRecord::Relation.send(:include, Track::TrackRelation)