【问题标题】:Rails. How to extend controller class from plugin without any modification in controller file?导轨。如何在不修改控制器文件的情况下从插件扩展控制器类?
【发布时间】:2011-01-31 03:49:33
【问题描述】:

我使用的是 Rails 2.2.2。 Rails 手册说,从插件扩展控制器的方法是:

插件:

module Plug

def self.included(base)
  base.extend ClassMethods
  base.send :include, InstanceMethods
  base.helper JumpLinksHelper
end

 module InstanceMethods
   def new_controller_metod
     ...
   end
 end
 module ClassMethods
 end
end

app/controller/name_controller.rb

class NameController < ApplicationController
  include Plug
  ...

结束

问题:如果我们知道控制器名称,是否可以通过插件扩展控制器,无需修改控制器文件

【问题讨论】:

    标签: ruby-on-rails ruby include ruby-on-rails-plugins extend


    【解决方案1】:

    当然,如果您知道控制器的名称,请这样做

    NameController.send(:include, Plug)
    

    【讨论】:

    • Rails 先初始化插件,再初始化控制器。所以我只能在 environment.rb 的末尾运行这段代码。但同样的构造:在 environment.rb 结尾的 class_eval(%{class NameControler\n include Plung\n end;}) 没有结果。
    • @neutrino 您的解决方案几乎完美,但我无法理解?我在哪里运行这种和平的代码?如果我在 environment.rb 中运行它,则它用于第一个控制器执行。
    • 现在想不出任何特别的东西。顺便说一句,对于生产来说这应该足够了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 2012-05-12
    • 1970-01-01
    • 2012-01-29
    • 2016-10-30
    • 2016-02-13
    • 2013-08-28
    相关资源
    最近更新 更多