【问题标题】: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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-16
        • 1970-01-01
        相关资源
        最近更新 更多