1
我正在使用我的應用程序中的引擎,並在engines/MY_ENGINE/app/mailers
內爲此引擎創建郵件程序,但我得到uninitialized constant MY_ENGINE::TicketMailer
。Rails引擎不加載郵件程序
檢查加載的路徑,通過做puts $:
我看到鐵軌加載資產,控制器,模型和助手內的應用程序文件夾,但不是郵件。
有沒有辦法解決這個問題,並添加一個路徑來加載?
我正在使用我的應用程序中的引擎,並在engines/MY_ENGINE/app/mailers
內爲此引擎創建郵件程序,但我得到uninitialized constant MY_ENGINE::TicketMailer
。Rails引擎不加載郵件程序
檢查加載的路徑,通過做puts $:
我看到鐵軌加載資產,控制器,模型和助手內的應用程序文件夾,但不是郵件。
有沒有辦法解決這個問題,並添加一個路徑來加載?
我找到了解決這個問題的辦法。顯然,郵件程序文件夾是不會自動加載,但你可以添加文件夾到負載路徑手動添加像這樣的一條線,你engine.rb
:
paths['app/mailers'] << 'MY_ENGINE/app/mailers'
像這樣:
module MY_ENGINE
class Engine < ::Rails::Engine
isolate_namespace MY_ENGINE
paths['app/mailers'] << 'MY_ENGINE/app/mailers'
end
end
這解決了這一問題。
你確定你的郵件是這樣的命名空間嗎? – tadman
是的。它位於模塊MY_ENGINE中,它被稱爲TicketMailer。我打印加載的路徑和郵件程序文件夾不在那裏。即使我拼錯文件夾的名稱應加載。 –
如果你的模塊名字是* literally *'MY_ENGINE',你將會遇到問題。 Rails自動加載器會將其擴展爲'm_y_en_g_i_n_e'這不是你想要的東西。在自動加載程序系統中,example_name成爲'ExampleName'。最好使用「MyEngine」這樣的名字和「my_engine」的路徑來保持一致。 – tadman