【问题标题】:How to change search order for render a partial in plugin/engine in rails3?如何更改在rails3中的插件/引擎中呈现部分的搜索顺序?
【发布时间】:2011-06-01 22:55:22
【问题描述】:

我正在用 Rails3 编写一个模块化项目,我遇到了这个问题。

我有我的主要项目,我想通过不同的自定义来实现它的一部分,所以我正在使用引擎,所以我:

- 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 中的视图执行此操作吗?

这让我可以防止很多无用的“命名空间”。

【问题讨论】:

    标签: ruby-on-rails-3 ruby-on-rails-plugins rails-engines


    【解决方案1】:

    我们遇到了完全相同的问题并想出了这样的事情:

    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]
    

    详情请见https://github.com/rails/rails/commit/40b19e063592fc30705f17aafe6a458e7b622ff2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      • 1970-01-01
      • 2013-01-01
      • 2019-01-08
      • 1970-01-01
      相关资源
      最近更新 更多