Pro*_*ear 7 layout ruby-on-rails partial-views prepend rails-engines
一方面,我有一个可安装的引擎,假设 Front Front 包含我的资产和几页它与 MainApp 隔离。我不希望它触及主应用程序。
另一方面,我希望我的 MainApp 使用布局和部分 Front。所以我这样设置布局:
class ApplicationController < ActionController::Base
layout 'front/application'
end
Run Code Online (Sandbox Code Playgroud)
但是前端/应用直接引用引擎部分,因为隔离,像这样
render 'header' # front/ prefix is not required
Run Code Online (Sandbox Code Playgroud)
所以 MainApp 视图尝试加载 app/views/application/header 而不是 app/views/front/application/header
为了解决这个问题,我像这样放置了一个 prepend_view_path :
class ApplicationController < ActionController::Base
layout 'front/application'
before_filter :prepend_front
protected
def prepend_front
prepend_view_path "app/views/front"
end
end
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为引擎路径指向供应商。引擎将它自己添加到 prepend 路径列表中:~/main_app/vendor/private_gems/front-0.0.2/app/views 而我的 prepred_front 方法创建了这个:~/main_app/app/views/front
我试图强行添加正确的路径(但它看起来很脏):
prepend_view_path "#{Rails.root}/vendor/private_gems/front-0.0.2/app/views/front"
Run Code Online (Sandbox Code Playgroud)
我不工作,只是使应用程序崩溃...
而我被困在这里。也许我的设计是错误的?
最后我删除了isolate属性。我将视图文件夹向上移动了一个文件夹,移出了 engine_app 文件夹。
唯一的最终调整是将 EngineApp::Engine.url_helper 包含到 MainApp 应用程序控制器中。
前置堆栈如下所示:
所以它是基于引擎的,然后在顶部添加主要应用程序的东西。
| 归档时间: |
|
| 查看次数: |
2727 次 |
| 最近记录: |