[英]Monkeypatch across Engines in Rails
首先:是的,猴子補丁很糟糕,我感覺自己已經是個罪人了。 但在這種情況下,我還沒有找到另一種解決方案。
情況:
引擎1(Alchemy-CMS):提供包含多個元素的頁面模型。
引擎2(我的Alchemy-Contentable):應該提供一種方法將這些元素綁定到您喜歡的任何資源(= model)。
目的是為資源提供像Alchemy這樣的cms功能,這意味着添加標題,段落,圖片,視頻等元素......
在“頁面層”一切都很好。 我為一個模型創建了一個mixin,它標識了自己對元素的滿足感。
我希望盡可能地保持煉金術,因此繼承元素不是一個選項(新的數據庫表,新的相關模型......)。 所以猴子補丁在這里似乎已經足夠了(仍然是hacky,但這次我猜它很好)。
問題:
如何從另一個引擎成功修補一個引擎的類? 當我試圖像往常一樣重新開課時,它抱怨不要找到常數。 可能這是由於類的延遲加載。
有效的是:
config.after_initialize do
Alchemy::Admin::ElementsController.send(:include, AlchemyContentable::ElementsControllerMixin)
Alchemy::Admin::ElementsController.send(:before_filter, :load_contentable_to_page, :only => [:index, :new, :create])
end
但這似乎很容易出錯,特別是在從mixin訪問新定義的消息時(比如app_mixin中的Alchemy :: Element.my_new_method,它包含在你的app的模型中)
以前有人有這種情況嗎? 有什么方法嗎? 至少是一種'可靠'的方法來創建和覆蓋引擎類中的某些方法並在mixin中調用它們?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.