有没有办法在主应用程序的覆盖视图中呈现引擎的“超级”视图?

时间:2013-10-01 20:00:05

标签: ruby-on-rails view ruby-on-rails-3.2 rails-engines

我正在开发一个带有控制器和视图的引擎,但是我想允许覆盖视图(这很简单,因为Rails :: Engine允许通过自动从主应用程序中添加app/views来实现这一点到引擎的视图路径)。但是,我希望被覆盖的视图能够引用引擎中的视图 - 例如,我想在我的应用程序中使用自定义内容“包装”引擎的视图:

# main_app/app/views/engine/template.haml

# ... custom stuff here
= render template: 'engine/template'
# ... custom stuff here

问题是,一旦我覆盖它,我找不到引用引擎视图的方法......是否可能?

1 个答案:

答案 0 :(得分:1)

尝试通过提供引擎模板文件的完整路径来渲染文件。

  # in view
  <%= engine_view {|f| render file: f} %>

  # in helper
  def engine_view(&b)
     yield eval("__FILE__.gsub(Rails.root.to_s, YourEngine::Engine.root.to_s)",b.binding) 
  end