将belongs_to分解为一个通用模块

时间:2011-08-09 01:44:10

标签: ruby-on-rails activerecord

我将ActiveRecordA的内容分解为模块M,以便我能够复制某些数据管道。原始A具有AR宏方法,例如belongs_to :X。虽然我能够将非AR内容很好地分离到模块中并将其混合回A,但该模块对开箱即用的belongs_toB一无所知。如何使模块可用,然后将其混合回新的浅A,现在只有include s MB,这是一个具有自己的基础AR表的A的克隆?或者我应该写一个像acts_as插件(对吗?)而不是M?在belongs_to中保留A并在B中复制{#1}}有效,但却打败了干......

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

基本上belongs_to 是一种类方法。所以你可以永远。你也可以写一个acts_as插件


module ActiveRecord
module Acts
  module M
    def self.included(base)
      base.extend M::ClassMethods
    end

    module ClassMethods
      def acts_as_m
        class_eval <<-CLASS_METHODS
          belongs_to :X
       CLASS_METHODS
     end
   end
 end
end

ActiveRecord::Base.send(:include, ActiveRecord::Acts::M)

class A
 acts_as_m
end 

它通常只是运行class_eval