2009-12-01 30 views
1

我想覆盖由Rails引擎定义的控制器中的操作。从Rails引擎重写控制器时是否需要原始文件?

好像我需要导入原始文件重新打开类,像这样前:

require File.join(RAILS_ROOT, 'vendor/plugins/myplugin/app/controllers/some_controller') 
class SomeController 

    def index 
    render :text => 'this is my index' 
    end 
end 

这是有道理的,但需要相当难看。有没有某种Rails魔法可以让我避免最初的需求?

+0

你可以通过改变'#的ActiveSupport自动require_or_load'使,看到http://stackoverflow.com/questions/5045068/extending-controllers-of-一个护栏-3-发动机内式主应用内 – Andrei 2011-02-19 14:39:19

回答

1

这是一个完整的猜测...

似乎更多的加载时间问题。如在中,您的文件在插件之前被加载。你的行动位于何处?配置/初始化? LIB?

我不确定什么时候Rails引擎被加载,所以玩弄的位置(应该通过把它放在lib中)。

或者,更好的是,创建自己的插件并进行更改,并确保它在原始文件之后加载。

而且有可能需要更多的东西一样:

SomeController.class_eval do 

    def index 
    ... 
    end 

end 
相关问题