[英]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.