0

我想製作一個引擎。我的引擎可能是可安裝的或不是不重要。但我想使用我的主要應用程序佈局,如Devise來渲染引擎的視圖。這也很容易。如何使用Devise等應用程序佈局製作引擎?

但是!當我的應用程序的佈局和rails引擎的視圖模板呈現時,我得到了一個異常,因爲我在我的佈局中使用了url helper,但是這個url helpers在我的main_app中。所以我知道我可以在佈局文件中的所有url助手之前編寫一個main_app上下文,但我不想這樣做。 Devise正在以這種方式工作。例如,如果您查看會話/新視圖,則不必在應用程序佈局中編寫main_app.pages_url。但我不知道他們是如何做到的。我想知道它,並且我已經閱讀了我閱讀文檔的代碼,但是我什麼都沒發現。請有人告訴我他們是如何做到的。我該如何製作一個處理像Devise這樣的main_app url助手的引擎。謝謝。

+0

這是你在找什麼? https://github.com/plataformatec/devise/blob/master/lib/devise/controllers/url_helpers.rb – Novae

+0

不,這不是。這些在main_app上下文中生成設計助手。我嘗試在應用程序佈局中使用主應用程序url助手。在這種情況下,我的常規rails引擎將引擎視圖文件和應用程序佈局文件放在一起沒有找到mainApp(但是main_app)的url helper方法。例如,我有一個圖層的應用程序,圖層中有一個菜單。我在菜單中使用了一些網址助手。之後我渲染引擎視圖​​。我的所有網址助手都使用main_app.example_path格式,但在每個MainApp助手之前不要求使用這個煩人的上下文。如何設計? –

回答

1

這取決於你的引擎的種類。如果您的引擎包含行isolate_namespace SomeModule,這意味着url_helpers(和通常的助手)不會在應用程序和引擎之間共享。所以你需要使用像main_app等工具。也就是說,Devise所共享的所有佈局都不會調用isolate_namespace,這是引擎在Rails 2.2中引入時的工作原理。 Rails 3.1中增加了isolate_namespace功能,以便那些希望解耦更強的用戶。

+0

我曾嘗試從我的引擎中刪除isolate_namespace行,並將routes.rb重寫爲Rails.application.routes,但此引擎是使用--mountable生成的。現在我生成一個不帶可安裝選項的新引擎,它完美地工作。我不知道可能有什麼區別。但它的工作。謝謝! –

相關問題