1

我希望能够在基础应用程序中覆盖我的 rails 3 引擎的模型和控制器。

检查 $LOAD_PATH,我发现引擎的 'app/{models,controllers}' 在那里,但我不能明确要求引擎的模型或控制器文件:要求 'engine_name/model_name' 失败,“没有这样的文件”(尝试使用两个命名空间( app/controllers/enginename/*) 和普通引擎)。

那么,在 Rails 3 中扩展引擎模型/控制器而不将它们复制到基本应用程序的最佳方法是什么?


基本上,这是一个加载顺序问题。所以,如果我明确要求引擎中的模型,一切都很好,但我希望有更好的方法。

4

1 回答 1

6

所以我实际上回去写了文档。答案是使用任何一个打开类控制器和模型类,

  • 类#eval_class
  • ActiveSupport::关注

更多细节在这里, http ://guides.rubyonrails.org/engines.html#overriding-models-and-controllers

(已编辑。从“edgeguides”子域更改为“guides”子域)

于 2012-08-26T04:17:31.310 回答