移动到 gem 后模块不再工作
Module no longer works after moving to gem
我有一个模块 Voltaire
,效果很好。在我的文章控制器中,我有一种方法可以通过传递到参数中的数量来增加用户的声誉。
我决定制作一个gem提供的模块。从那以后,我从我的 application_controller.rb 文件中删除了该模块,并使其成为自己的 gem,推送到 github,并捆绑安装它:
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'
它之前工作的地方。
我也试过从控制器中移除 include Voltaire
,但这仍然无效。
我错过了什么?
我能让它工作的唯一方法是将 include Voltaire
放在控制器的顶部。我的印象是 rails 会自动执行此操作,但我在两个单独的应用程序上尝试了 gem,这是唯一可行的方法。
编辑
在收到一些评论后,我设法让它正常运行。在我的模块所在的 gem 文件中,我刚刚包含了这个。现在 rails 将其包含到控制器中并且运行良好。
if defined? ActionController::Base
ActionController::Base.class_eval do
include Voltaire
end
end
我有一个模块 Voltaire
,效果很好。在我的文章控制器中,我有一种方法可以通过传递到参数中的数量来增加用户的声誉。
我决定制作一个gem提供的模块。从那以后,我从我的 application_controller.rb 文件中删除了该模块,并使其成为自己的 gem,推送到 github,并捆绑安装它:
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'
它之前工作的地方。
我也试过从控制器中移除 include Voltaire
,但这仍然无效。
我错过了什么?
我能让它工作的唯一方法是将 include Voltaire
放在控制器的顶部。我的印象是 rails 会自动执行此操作,但我在两个单独的应用程序上尝试了 gem,这是唯一可行的方法。
编辑
在收到一些评论后,我设法让它正常运行。在我的模块所在的 gem 文件中,我刚刚包含了这个。现在 rails 将其包含到控制器中并且运行良好。
if defined? ActionController::Base
ActionController::Base.class_eval do
include Voltaire
end
end