如何在Rails中扩展模型?

时间:2011-06-02 15:39:29

标签: ruby-on-rails ruby

我需要在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并检查了文件是否已加载。

1 个答案:

答案 0 :(得分:1)

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

要解决此问题,请更改此行:

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

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