2012-08-15 32 views
2

我對Rails如何自動將app/helpers中的模塊加載到模型感興趣。Rails如何自動將ModelHelper加載到模型中

也就是說,當app/helpers/widget_helper.rb存在且包含WidgetHelper時,該模塊會自動加載到Widget模型中。

我需要在應用程序中包含任意代碼的目錄包含到模型中,並且希望避免包含每個單獨的模塊。我認爲嘲笑這個功能會很有用。

回答

0

仍然不確定助手是如何加載的,但我花了一些時間找出一個好的方法來完成這項工作,因爲導軌config.after_initialize call

鑑於您希望有一個帶有ModelGoods的app/goods目錄,該目錄具有自動加載的命名模塊。下面的代碼添加到application.rb

config.after_initialize do 
    Dir["#{Rails.root}/app/goods/*_goods.rb"].each do |file| 
    name = File.basename(file, ".rb").humanize.titleize.gsub(" ","") 
    name.gsub("Goods","").constantize.send :include, "Goods::#{name}".constantize 
    end 
end 

這將解析在app/goods子目錄下的所有文件,包括任何名爲模型包含在該目錄中的模塊。

顯然,你可以用任何你想要的來代替「貨物」,但這代表了一種劃分代碼的方式,而不必手動包含你創建的每個模塊。

+0

不幸的是,這似乎並沒有使視圖中的類中可用的模塊方法。 – JohnMetta 2012-08-20 17:27:15