簡體   English   中英

覆蓋Rails引擎控制器操作

[英]Override a Rails Engine controller action

我正在使用Rails引擎,但我需要自定義一些控制器操作。

我實際上分叉引擎,並將這些自定義實現到我自己的fork中,但我想知道Rails引擎中是否有正式的方法來覆蓋和自定義控制器。

只需在您自己的app\\controllers文件夾中定義一個具有相同名稱的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  

就我而言,我正在使用Blazer gem並為其添加身份驗證。 由於我使用的是聲明式授權,Blazer不直接支持,我需要打開Blazer的基本控制器並將其授權要求添加到其中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM