用于扩展actioncontroller for rails的插件

时间:2010-10-06 13:23:03

标签: ruby-on-rails plugins ruby-on-rails-3 ruby-on-rails-plugins

我正在写第一个有关rails的插件。该插件应该扩展actioncontroller :: base

所以在完成这里的教程之后就是我做的......

# Foo
class << ActionController::Base
  def function_name

假设插件被称为foo ...但是当我从一个动作调用function_name时,没有任何反应......似乎甚至没有调用function_name。没有方法丢失错误,所以我确定插件也已加载...

真的很糟糕!

2 个答案:

答案 0 :(得分:11)

你应该通过on_load钩子来做到这一点:

ActiveSupport.on_load(:action_controller) do
  include Foo
end

这将推迟包括模块,直到ActionController :: Base正常加载。这样可以避免AC::Base过早加载,这可以在许多Rake任务和加载控制台时节省一些加载时间。

答案 1 :(得分:2)

您需要在ActionController中包含一个类。

module Foo
  def function_name
  end
end

ActionController::Base.send(:include, Foo)