覆盖一个开源Rails个APP的视图,不编辑原始视图

Override an open source Rails APP views, without editing the original views

我目前正在使用 ROR 应用程序。问题是应用程序在创建时并没有考虑很多定制。

注意:这是一个 ROR APP不是引擎

我愿意:

我尝试将应用程序转换为引擎,安装它,然后创建视图。这将覆盖应用程序中的那些。

尽管这行不通,并且需要大量时间才能 'engine' 准备就绪。

在控制器中,您可以使用命令render "name_of_custom_view" 覆盖动作的默认视图。 (http://guides.rubyonrails.org/layouts_and_rendering.html#using-render)

.erb 模板语言不是开箱即用的吗?尝试命名您的自定义视图 *.html.erb 而不是 *.html.slim.

事实上,最好的方法是将应用程序用作引擎。有多难,取决于当前的应用程序。但就我个人而言,直接修改视图源代码与复制整个视图代码并在其他地方修改之间没有太大区别。通常,视图彼此 "inherit",因此您必须复制粘贴并编辑与应用源代码中相同的代码。

顺便说一下,如果你想轻松地让它为引擎做好准备,你可以尝试只提取视图文件夹(如果需要,还可以提取助手、资产)并将其放入引擎中,并保留所有的东西(控制器) ,模块,路由等)在你的主应用程序中。然后,在主应用程序中,您可以创建具有各自路径的视图,从引擎复制其内容并仅修改它们。

但是为了这样或类似的目的,有一个 gem Deface which is used in Spree 可以让扩展更容易地一起交互。 gem 原始视图未被修改并且您创建 deface 覆盖文件的要点是,使用 Nokogiri (css,xpath) 语法,在运行时更改真实视图内容。