2011-06-02 78 views
0

我需要在Rails 2.3.11应用程序中扩展模型,而不必触摸原始源文件。我需要在其中添加一个:has_many association。我试过Extend model in plugin with "has_many" using a module中提到的方法没有成功。我需要扩展的类叫做UbiquoUser。下面的代码我在lib/extensions.rb如何在Rails中扩展模型?

module Sindicada 
    module Extensions 
    autoload :UbiquoUser, 'extensions/ubiquo_user' 
    end 
end 
UbiquoUser.send(:extend, Sindicada::Extensions::UbiquoUser) 

下面是我在lib/extensions/ubiquo_user.rb

module Sindicada 
    module Extensions 
    module UbiquoUser 
     module ClassMethods 

     def has_audio_favorites 
      has_many :audios, :through => :audios_favorite 
     end 

     end #ClassMethods 

    def self.included(base) 
     base.extend(ClassMethods).has_audio_favorites 
    end 

    end #UbiquoUser 
    end #Extensions 
end #Sindicada 

然而,当我尝试访问该应用程序的UbiquoUser财产音频我得到的错误undefined method audios for class blablabla

我也在environment.rb文件中有require 'extensions'并检查了文件正在加载。

回答

1

你现在面临的问题是你正在扩展你的班级,不包括一个模块,所以Sicada::Extensions::UbiquoUser#included方法永远不会被调用。

为了解决这个问题,改变这一行:

UbiquoUser.send(:extend, Sindicada::Extensions::UbiquoUser) 

UbiquoUser.send(:include, Sindicada::Extensions::UbiquoUser) 
+0

非常感谢,这使得它。干杯! – brafales 2011-06-02 16:09:50