2011-06-02 59 views
0

问题下面是我遇到的问题: https://gist.github.com/1003813Rails的:我在与遗传协会

假设你有一个派生类:

class User < ActiveRecord::Base 
include ThisThing 
include ThatThing 

[...] 

end 

class OurUser < User 
set_table_name 'users' 

[...] 

end 

我需要一些协会,例如:

belongs_to :friend, 
     :class_name => 'User', 
     :foreign_key => :friend_of 

问题我如果这是在User类中声明的,OurUser的朋友将是一个User,并且不会在OurUser中包含任何额外的方法。当然,在编写User类时,您不知道正确的类名。

我需要我怎样才能让它在一些suggestons所以OurUser将有正确的类

回答

0

的.friend与所有的共享行为创建一个模块,并使用模块#包括钩来动态定义的相关项目在包括。即:

module SharedBehaviour 
    def self.included(base) 
    base.class_eval do 
     set_table_name 'users'   

     belongs_to :friend, :class_name => base.name, :foreign_key => :friend_of 

     include ThisThing 
     include ThatThing 

     # other class method calls go here (validations, etc) 
    end 
    end 

    module ClassMethods 
    # shared class methods go here 
    end 

    # shared instance methods go here 
end 

class User < ActiveRecord::Base 
    inclde SharedBehaviour 
end 

class OtherUser < ActiveRecord::Base 
    include SharedBehaviour 
end