我希望我的门卫视图使用应用程序布局:
https://github.com/applicake/doorkeeper/wiki/Customizing-views
它包含主应用程序中的路由和辅助方法。
对于路由,我可以将main_app添加到路径前面,但是对于helper方法,我收到以下错误:
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
答案 0 :(得分:8)
如果您生成了视图并将它们放在app/views/doorkeeper/**
中,那么引擎仍会使用门卫控制器。
要解决此问题,您必须将助手包含在引擎的ApplicationController
中。假设你有类似的东西:
module ApplicationHelper
def my_helper
"hello"
end
end
<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
当您想要自定义布局时,这是类似的配置。
答案 1 :(得分:1)
application_helper.rb中的辅助方法不是main_app的方法。
main_app变量是一个具有ActionDispatch :: Routing :: RoutesProxy的类/模块的对象。
main_app是一个帮助程序,可让您访问应用程序路径。例如,main_app.page_path('api')。
我假设,有了门卫,你需要访问你想要的路径; main_app.highvoltage_page_path( 'API')。some_doorkeeper_active_method
至少应该向你发送正确的方向,另见:
祝你好运。答案 2 :(得分:0)
嗯,这个问题很老了,但我遇到了完全相同的问题,我有一个解决方案。菲利普·伊莱亚斯·菲利普的回答要求。
你需要做一点“覆盖”。将门卫的引擎application_controller.rb文件复制到您的应用程序到app / doorkeeper /。然后只需更改
module Doorkeeper
class ApplicationController < ActionController::Base
到
module Doorkeeper
class ApplicationController < ::ApplicationController
现在让门卫使用你的ApplicationController,它可能拥有你需要的所有方法。与https://github.com/doorkeeper-gem/doorkeeper/wiki/Customizing-views一起,一切都很有效。