【问题标题】:Plugin to extend actioncontroller for rails用于扩展 Rails 的动作控制器的插件
【发布时间】:2010-10-06 13:23:02
【问题描述】:
我正在编写我的第一个 Rails 插件。该插件应该扩展 actioncontroller::base
所以在完成教程之后,我就是这样做的......
# Foo
class << ActionController::Base
def function_name
假设插件被称为 foo...但是当我从一个动作中调用 function_name 时,什么都没有发生...似乎 function_name 甚至没有被调用。也没有方法丢失错误,所以我确定插件也已加载...
我被卡住了!
【问题讨论】:
标签:
ruby-on-rails
plugins
ruby-on-rails-3
ruby-on-rails-plugins
【解决方案1】:
你应该通过 on_load 钩子来做到这一点:
ActiveSupport.on_load(:action_controller) do
include Foo
end
这将推迟包含模块,直到 ActionController::Base 正常加载。这将避免AC::Base 被过早加载,这可以在许多 Rake 任务和加载控制台时节省一些加载时间。
【解决方案2】:
您需要在 ActionController 中包含一个类。
module Foo
def function_name
end
end
ActionController::Base.send(:include, Foo)