Rails引擎扩展视图,而不是覆盖

时间:2017-05-31 12:49:50

标签: ruby-on-rails ruby ruby-on-rails-5 rails-engines

我知道我可以通过在引擎中创建相同的文件并从应用程序中删除它来覆盖引擎内的应用程序视图(例如:' users / show.html.erb') 。

但是,我想要的是能够扩展应用程序视图,而不是覆盖。

假设我有一个yield内部' users / show.html.erb'主要应用:

yield :foo

我想要的是引擎指定相同的文件' users / show.html.erb'并拥有content_for

content_for :foo {}

因此,将一些模板数据从引擎视图注入到应用程序视图中。

显然,上述工作一旦在应用程序中找到模板文件就不会起作用,它不会在引擎中找到一个。

有没有办法让这项工作?

1 个答案:

答案 0 :(得分: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'

它和你的建议一样简单。

这个gem尝试实现视图的部分扩展,但它与我刚才描述的类似:https://github.com/amatsuda/motorhead#partially-extending-views-in-the-main-app