2017-05-31 111 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

叶,这就是我最终去了。我的解决方案在每个引擎中查找特定的部分(名称与引擎的名称间隔)。 –