移动到gem后,模块不再有效

时间:2017-05-24 03:42:29

标签: ruby-on-rails ruby rubygems

我有一个很好的模块 fileprivate protocol TestProtocol { func testFunc1() func testFunc2() } public class TestClass : TestProtocol { public func testFunc1() {} public func testFunc2() {} } 。在我的文章控制器中,我有一种方法可以通过传入参数的数量来提高用户的声誉。

我决定制作一个gem提供的模块。我已经从我的application_controller.rb文件中删除了该模块,并使其成为自己的gem,推送到github,并捆绑安装它:

Voltaire

当我使用模块中的任何方法时,我得到它之前工作的class ArticlesController < ApplicationController include Voltaire def upvote @article.upvote_by current_user voltaire_up(1, :reputation, @article.user_id) redirect_to :back end def downvote @article.downvote_by current_user voltaire_down(1, :reputation, @article.user_id) redirect_to :back end end

我也尝试从控制器中删除undefined method `voltaire_down',但这仍然无效。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

我能让这个工作的唯一方法是将include Voltaire放在控制器的顶部。我的印象是rails自动执行此操作,但我在两个独立的应用程序上尝试了gem,这是唯一可行的方法。

修改

我设法在一些评论之后让它正常运行。在我的模块所在的gem文件中,我只是包含了这个。现在rails将它包含在控制器中,它可以很好地工作。

if defined? ActionController::Base
  ActionController::Base.class_eval do
    include Voltaire
  end
end