由於認證寶石,如Devise或Clearance使用他們自己的內置控制器,我覆蓋它們時有幾個問題。每次嘗試覆蓋它時,都會出現錯誤,我不知道是什麼原因導致了錯誤。關於覆蓋設計或清除控制器
例如,創建具有制定一個新的用戶控制器我明白我必須這樣創建一個控制器:
# app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
都很好。現在讓我們說我想添加某些東西到控制器的def new
部分。
1)獨自離開控制器的def create
一部分,我必須把
def create
super
end
是嗎?或者我甚至需要在新控制器中引用它?
2)如果鍵入
def new
#my custom code here
end
這是否替換原有的設計控制器的def new
一部分,還是隻是補充呢?意思就是說,我也必須把
resource = build_resource({})
respond_with_navigational(resource){ render_with_scope :new }
這對Devise registrations_controller.rb的Def新零件的默認行爲?
3.)Devise中有一個過濾器可以防止您在註冊時註冊,但我需要重寫此過濾器。我該怎麼做呢?我猜這與registrations_controller.rb的prepend_before_filter :require_no_authentication, :only => [ :new, :create, :cancel ]
部分有關,但我不太確定。
同樣的問題適用於清除,雖然路線和文件略有不同。(我要求清理也是因爲我還沒有決定使用哪個認證寶石 - 清理吸引我,因爲輕量級代碼,但設計有我需要的其他功能)。
謝謝。我發誓我讀了維基上的每一個字,但在任何地方都找不到。只是一個後續問題:如果我只需要更改控制器的「def new」部分,是否需要將def創建超級(和def編輯,def更新等)放在新的registrations_controller.rb以及? – cdotfeli 2011-12-20 06:21:39
不,你應該只能定義你想改變的方法。 – 2011-12-20 14:17:40