我需要在Rails 2.3.11应用程序中扩展模型而不触及原始源文件。我需要在其中添加:has_many association
。我已经尝试了Extend model in plugin with "has_many" using a module中提到的方法但没有成功。我需要扩展的类称为UbiquoUser
。这是我在lib/extensions.rb
中的代码:
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
。
我在require 'extensions'
文件中也有environment.rb
并检查了文件是否已加载。
答案 0 :(得分:1)
你现在遇到的问题是你正在扩展你的类,不包括一个模块,所以永远不会调用Sicada::Extensions::UbiquoUser#included
方法。
要解决此问题,请更改此行:
UbiquoUser.send(:extend, Sindicada::Extensions::UbiquoUser)
到
UbiquoUser.send(:include, Sindicada::Extensions::UbiquoUser)