[英]How do I extend a model in Rails?
我需要在 Rails 2.3.11 應用程序中擴展 model 而不接觸原始源文件。 我需要在其中添加一個:has_many association
。 我已經嘗試了在插件中使用“has_many”擴展 model 中提到的方法,但沒有成功。 我需要擴展的 class 稱為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
。
我在environment.rb
文件中也有require 'extensions'
,並檢查了文件是否正在加載。
您現在遇到的問題是您正在擴展您的 class,而不是在其中包含模塊,因此Sicada::Extensions::UbiquoUser#included
方法永遠不會被調用。
要解決此問題,請更改此行:
UbiquoUser.send(:extend, Sindicada::Extensions::UbiquoUser)
至
UbiquoUser.send(:include, Sindicada::Extensions::UbiquoUser)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.