2011-06-01 80 views
2

我在Rails3中編寫了一個模塊化項目,並且我遇到了這個問題。如何更改在rails3中渲染部分插件/引擎的搜索順序?

我有我的主要項目,我想實現它的一部分與differentes定製,所以我使用的引擎,所以我:

- app 
    - views 
    - shared 
     - _header.html.erb  <-- This one is called 
    - ... 
- config 
- ... 
- vendors 
    - plugins 
    - myplugin 
     - app 
     - views 
      - controller1 
      - action1.html.erb 
      - shared 
      - _header.html.erb  <--- I want to render this! 

但如果從action1.html.erb我打電話

<%= render 'shared/header' %> 

第一個_header.html.erb被調用,我想在myplugin中調用「before」之一。我可以只在myplugin中查看視圖嗎?

這使我可以防止大量無用的「命名空間」。

回答

2

我們有完全相同的問題,像這樣的東西出來了:

def self.prioritize_engine_view_paths!(engine) 
    self.view_paths = engine.paths["app/views"].existent + MyApp::Application.paths["app/views"].existent 
end 

它在主應用程序的ApplicationController中定義的,然後它被稱爲在每個發動機的ApplicationController:

module MyEngine 
    class ApplicationController < ::ApplicationController 
    prioritize_engine_view_paths!(MyEngine::Engine) 
    end 
end 

[編輯]在Rails 3.2.0中它會容易得多:

config.railties_order = [Blog::Engine, :main_app, :all] 

S ee https://github.com/rails/rails/commit/40b19e063592fc30705f17aafe6a458e7b622ff2瞭解詳情。