我希望我的看门看法使用的应用程序布局:
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
如果您所产生的观点和它们被放置在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
这是类似的配置,当你想自定义布局。
在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
祝好运。
那么,这个问题是很老了,但是我遇到了一模一样的问题,我有一个解决方案。 在一个要求对费利佩埃利亚斯菲利普的回答。
你需要做一点点“覆盖”。 在门卫引擎application_controller.rb文件复制到你的应用程序到应用程序/守门人/。 然后,只需改变
module Doorkeeper
class ApplicationController < ActionController::Base
至
module Doorkeeper
class ApplicationController < ::ApplicationController
使得现在的门卫用你的ApplicationController这将可能拥有你所需要的方法。 加上https://github.com/doorkeeper-gem/doorkeeper/wiki/Customizing-views一切工作出色。