Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 轨道。如何在不修改控制器文件的情况下从插件扩展控制器类?_Ruby On Rails_Ruby_Include_Ruby On Rails Plugins_Extend - Fatal编程技术网

Ruby on rails 轨道。如何在不修改控制器文件的情况下从插件扩展控制器类?

Ruby on rails 轨道。如何在不修改控制器文件的情况下从插件扩展控制器类?,ruby-on-rails,ruby,include,ruby-on-rails-plugins,extend,Ruby On Rails,Ruby,Include,Ruby On Rails Plugins,Extend,我正在使用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

我正在使用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
  ...
classnamecontroller
结束


问题:如果我们知道控制器名称,是否有方法从插件扩展控制器,而不修改控制器文件

当然,如果您知道控制器名称,请

NameController.send(:include, Plug)

Rails首先初始化插件,然后初始化控制器。因此,我只能在environment.rb的末尾运行此代码。但是同样的构造:environment.rb结尾的class_eval(%{class NameControler\n include Plung\n end;})没有结果。@neutrino你的解几乎完美,但我不明白?我在哪里运行这种代码的和平?如果我在environment.rb中运行它,它将只用于第一次控制器执行。现在想不出任何特别的东西。顺便说一句,对于生产来说,这应该足够了。