4

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

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

4

3 回答 3

8

如果您生成了视图并将它们放置在其中,app/views/doorkeeper/**那么引擎仍然使用门卫控制器。

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

app/helpers/application_helper.rb

module ApplicationHelper
  def my_helper
    "hello"
  end
end

app/views/doorkeeper/applications/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

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

于 2012-06-06T13:07:07.807 回答
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

至少,这应该有望使您朝着正确的方向前进,另请参见:

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

祝你好运。

于 2012-06-04T13:30:46.713 回答
1

好吧,这个问题很老了,但我遇到了完全相同的问题,我有一个解决方案。对菲利普埃利亚斯菲利普的回答要求的人。

你需要做一点“覆盖”。将门卫的引擎 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一起,一切都很出色。

于 2015-01-22T19:27:20.620 回答