隔离引擎(门卫) - 使用main_app中的帮助方法

Dan*_*anS 4 gem ruby-on-rails-3

我希望我的门卫视图使用应用程序布局:

https://github.com/applicake/doorkeeper/wiki/Customizing-views

它包含主应用程序中的路由和辅助方法.

对于路由,我可以将main_app添加到路径前面,但是对于帮助器方法,我得到以下错误:

undefined method `is_active?' for #<ActionDispatch::Routing::RoutesProxy:0xade808c>

<li class="<%= main_app.is_active?("high_voltage/pages", "api") %>"><%= link_to t('developers'), page_path('api') %></li>
Run Code Online (Sandbox Code Playgroud)

为什么是这样?帮助者在app/helpers/application_helper.rb

小智 8

如果您生成视图并将它们放入,app/views/doorkeeper/**那么引擎仍然使用门卫控制器.

要解决此问题,您必须将助手包含在引擎中ApplicationController.假设你有这样的事情:

应用程序/佣工/ application_helper.rb

module ApplicationHelper
  def my_helper
    "hello"
  end
end
Run Code Online (Sandbox Code Playgroud)

应用程序/视图/门卫/应用/ index.html.erb

<p>
  <%= my_helper %>
</p>
Run Code Online (Sandbox Code Playgroud)

在将应用程序助手包含在门卫控制器中之前,这将不起作用.所以在config/application.rb:

class YourApp::Application < Rails::Application
  config.to_prepare do
    # include only the ApplicationHelper module
    Doorkeeper::ApplicationController.helper ApplicationHelper

    # include all helpers from your application
    Doorkeeper::ApplicationController.helper YourApp::Application.helpers
  end
end
Run Code Online (Sandbox Code Playgroud)

当您要自定义布局时,这是类似的配置.