如何为父轨应用程序提供可用的引擎方法?

时间:2015-02-06 04:16:23

标签: ruby-on-rails ruby gem rails-engines

我正在编写一个rails引擎。

我在应用程序控制器中的gem中有两个方法(authenticate和current_user)。 https://github.com/krunal/aadhar/blob/master/app/controllers/aadhar/application_controller.rb

我想'authenticate'方法应该可以作为父rails应用程序中的before_filter使用。

我希望'current_user'方法可以作为父rails应用程序中的方法和帮助程序使用。

我不知道如何实现这一目标。

在我的父应用程序中,我说有一个帖子控制器。我想以这种方式使用'authenticate'和'current_user'。

PostsController < ApplicationController
before_filter :authenticate

def index
  current_user.posts
end

2 个答案:

答案 0 :(得分:1)

您在引擎中使用isolate_namespace(推荐),但这意味着您需要在父应用程序中使用命名空间。因此,如果您将其更改为:

PostsController < Aadhar::ApplicationController

您可以访问authenticatecurrent_user方法。请注意,您必须添加

helper_method :current_user
控制器中的

能够从视图中访问它。我试过这个并确认它有效。

答案 1 :(得分:1)

参考 - A way to add before_filter from engine to application

步骤

1)在lib / aadhar /中创建了一个新文件authenticate.rb。 authenticate.rb

2)lib / aadhar.rb aadhar.rb

中需要authenticate.rb

3)在lib / aadhar / engine.rb engine.rb

中添加了以下行
ActiveSupport.on_load(:action_controller) do
  include Aadhar::Authenticate
end

4)我的父rails应用程序现在提供了Authenticate和current_user方法。