隔离引擎(看门人) - 从main_app使用辅助方法(Isolated engine (doork

2019-09-17 18:19发布

我希望我的看门看法使用的应用程序布局:

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>

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

Answer 1:

如果您所产生的观点和它们被放置在app/views/doorkeeper/**那么发动机依旧采用守门人控制器。

为了解决这个问题,你必须包括你的助手(一个或多个)进入发动机的ApplicationController 。 比方说,你有这样的事情:

应用程序/佣工/ application_helper.rb

module ApplicationHelper
  def my_helper
    "hello"
  end
end

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

<p>
  <%= my_helper %>
</p>

这不会工作,直到你有你的应用程序助手到守门人控制器。 因此,在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

这是类似的配置,当你想自定义布局。



Answer 2:

在application_helper.rb的helper方法将不是main_app的方法。

所述main_app变量是ActionDispatch ::路由:: RoutesProxy的类/模块的对象。

main_app是一个辅助,让你访问你的应用途径。 main_app.page_path( 'API'),例如。

我假设,与看门,你需要访问你想要的路径; main_app.highvoltage_page_path( 'API')。some_doorkeeper_active_method

这应该有希望,至少,送你在正确的方向,也见:

http://edgeapi.rubyonrails.org/classes/Rails/Engine.html#label-Using+Engine%27s+routes+outside+Engine

祝好运。



Answer 3:

那么,这个问题是很老了,但是我遇到了一模一样的问题,我有一个解决方案。 在一个要求对费利佩埃利亚斯菲利普的回答。

你需要做一点点“覆盖”。 在门卫引擎application_controller.rb文件复制到你的应用程序到应用程序/守门人/。 然后,只需改变

module Doorkeeper 
  class ApplicationController < ActionController::Base

module Doorkeeper 
  class ApplicationController < ::ApplicationController

使得现在的门卫用你的ApplicationController这将可能拥有你所需要的方法。 加上https://github.com/doorkeeper-gem/doorkeeper/wiki/Customizing-views一切工作出色。



文章来源: Isolated engine (doorkeeper) - use helper methods from the main_app