Mar*_*meo 14 ruby-on-rails rails-engines
我正在使用Rails引擎,但我需要自定义一些控制器操作.
我实际上是分叉引擎,并将这些自定义实现到我自己的fork中,但我想知道Rails引擎中是否有正式的方式来覆盖和自定义控制器.
nat*_*vda 19
只需在您自己的app\controllers文件夹中定义一个具有相同名称的控制器,它将首先被找到.这样您就可以轻松自定义它.
请注意:因为首先找到它,所以从引擎中更换整个控制器.这可能正是你想要的.在某些情况下,你只想稍微调整一下,然后重新打开类更好,只重新定义所需的内容.
要做的例子可以在这里找到:http://edgeguides.rubyonrails.org/engines.html#overriding-models-and-controllers
接受的答案中的链接实际上并未提供覆盖控制器的示例.他们提到文件的"开放式分类",但没有解释如何完成它.如果在应用程序中打开引擎类,则会出现循环依赖性错误,因为您正在引用/打开当前正在定义的类.因此,您需要确保首先加载引擎的实际类.
# in my app
# app/controllers/blazer/base_controller.rb
load Blazer::Engine.root.join('app/controllers/blazer/base_controller.rb')
Blazer::BaseController.class_eval do
filter_access_to :all
end
Run Code Online (Sandbox Code Playgroud)
就我而言,我正在使用Blazer gem并为其添加身份验证.由于我使用的是声明式授权,Blazer不直接支持,我需要打开Blazer的基本控制器并将其授权要求添加到其中.
| 归档时间: |
|
| 查看次数: |
8014 次 |
| 最近记录: |