Как изменить порядок поиска для рендера частичного в плагине / движке в rails3? - PullRequest
2 голосов
/ 02 июня 2011

Я пишу модульный проект в Rails3, и у меня есть эта проблема.

У меня есть основной проект, и я хочу реализовать его часть с различными настройками, поэтому я использую Engine, поэтому у меня есть:

- 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. Могу ли я сделать это только для просмотров в myplugin?

Это позволяет мне предотвратить множество бесполезных «пространств имен».

1 Ответ

2 голосов
/ 10 ноября 2011

У нас была точно такая же проблема, и мы получили что-то вроде этого:

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

[EDIT] В Rails 3.2.0 это будет намного проще:

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

Подробнее см. https://github.com/rails/rails/commit/40b19e063592fc30705f17aafe6a458e7b622ff2.

...