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