簡體   English   中英

Rails引擎擴展視圖,而不是覆蓋

[英]Rails engine extending views, not overriding

我知道我可以通過簡單地在引擎內創建相同文件並將其從應用程序中刪除(例如:“ users / show.html.erb”)來覆蓋引擎內的應用程序視圖。

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

可以說我在主應用程序的'users / show.html.erb'內部有一個yield

yield :foo

我想要的是引擎指定相同的文件“ users / show.html.erb”並具有content_for

content_for :foo {}

從而,將來自引擎視圖的一些模板數據注入到應用程序視圖中。

顯然,以上內容一旦在應用程序中找到模板文件就不會起作用,也不會在引擎中尋找一個。

有沒有辦法使這項工作?

在Rails中無法以這種方式擴展視圖。 但是,您可以通過使用局部函數來完成此操作。 在您的引擎中,編寫部分視圖文件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'

就像您的建議一樣簡單。

這個gem試圖實現視圖的部分擴展,但是它的工作方式與我剛剛描述的類似: https : //github.com/amatsuda/motorhead#partially-extending-views-in-the-main-app

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM