2017-05-31 113 views
2

我知道,我可以通過簡單地在引擎中創建相同的文件並從應用程序中刪除它來覆蓋應用程序視圖(例如:'users/show.html.erb 「)。Rails引擎擴展視圖,而不是覆蓋

但是,我想要的是能夠擴展應用程序視圖,而不是覆蓋。

可以說我有主應用程序的yield內「用戶/ show.html.erb」:

yield :foo

我要的是發動機指定相同的文件「用戶/節目.html.erb」和具有content_for

content_for :foo {}

由此,從發動機視圖注入一些模板數據,到應用程序視圖。

很明顯,上面的代碼不能正常工作,因爲一旦它在應用程序中找到模板文件,它就不會在引擎中尋找它。

有沒有辦法讓這項工作?

回答

0

無法在Rails中以這種方式擴展視圖。然而,你可以通過使用partials來實現這一點。在你的引擎,寫的局部視圖文件users/_show.html.erb,然後呈現在您的應用程序的視圖:

# app/views/users/show 

# will look for a partial called "_show.html.erb" in the engine's and app's view paths. 
render partial: 'show' 

這只是因爲你的建議很容易。

這種寶石試圖實施意見部分的擴展,但它的工作方式類似於我剛纔描述:https://github.com/amatsuda/motorhead#partially-extending-views-in-the-main-app

+0

葉,這就是我最終去了。我的解決方案在每個引擎中查找特定的部分(名稱與引擎的名稱間隔)。 –