使用 SessionsController 和 RegistrationsController 中的回调方法扩展基础 DeviseController class
Extend base DeviseController class with method for callbacks in SessionsController and RegistrationsController
我的问题类似于this one,没有答案。
我想将 after_filter :identify_with_segment, only: [:create]
添加到我的 RegistrationsController < Devise::RegistrationsController
和 SessionsController < Devise::SessionsController
。由于这两个控制器本身都继承自 DeviseController
,我认为实现此目的的 DRY 方法是扩展 DeviseController
并在那里定义方法。但是,我不断收到 unitialized constant
错误。
我的代码:
class DeviseController < DeviseController
def identify_with_segment
..
end
end
我意识到 class 的定义方式看起来不对。我也试过 class DeviseController < Devise::DeviseController
但这也不管用。
谁能解释扩展这些其他控制器所依赖的 DeviseController
的正确方法?
如果你想打开DeviseController
,你可以试试这个:
class DeviseController
def identify_with_segment
# ...
end
end
很多令人困惑的事情都是以严格的 DRY-ness 的名义完成的,这可能就是其中之一。有时,重复自己的话会让跟在你后面的人看得更清楚、更容易理解。
另一种选择是关注此功能,并 include
您的 RegistrationsController
和 SessionsController
中的那个模块。然后它是明确的你在做什么,你没有修改你不拥有的 类 。类似于:
# app/controllers/concerns/whatever_it_is_this_is_doing.rb
module WhateverItIsThisIsDoing
extend ActiveSupport::Concern
def identify_with_segment
# ...
end
included do
after_filter :identify_with_segment, only: [:create]
end
end
# app/controllers/registrations_controller.rb
class RegistrationsController
include WhateverItIsThisIsDoing
end
# app/controllers/sessions_controller.rb
class SessionsController
include WhateverItIsThisIsDoing
end
我的问题类似于this one,没有答案。
我想将 after_filter :identify_with_segment, only: [:create]
添加到我的 RegistrationsController < Devise::RegistrationsController
和 SessionsController < Devise::SessionsController
。由于这两个控制器本身都继承自 DeviseController
,我认为实现此目的的 DRY 方法是扩展 DeviseController
并在那里定义方法。但是,我不断收到 unitialized constant
错误。
我的代码:
class DeviseController < DeviseController
def identify_with_segment
..
end
end
我意识到 class 的定义方式看起来不对。我也试过 class DeviseController < Devise::DeviseController
但这也不管用。
谁能解释扩展这些其他控制器所依赖的 DeviseController
的正确方法?
如果你想打开DeviseController
,你可以试试这个:
class DeviseController
def identify_with_segment
# ...
end
end
很多令人困惑的事情都是以严格的 DRY-ness 的名义完成的,这可能就是其中之一。有时,重复自己的话会让跟在你后面的人看得更清楚、更容易理解。
另一种选择是关注此功能,并 include
您的 RegistrationsController
和 SessionsController
中的那个模块。然后它是明确的你在做什么,你没有修改你不拥有的 类 。类似于:
# app/controllers/concerns/whatever_it_is_this_is_doing.rb
module WhateverItIsThisIsDoing
extend ActiveSupport::Concern
def identify_with_segment
# ...
end
included do
after_filter :identify_with_segment, only: [:create]
end
end
# app/controllers/registrations_controller.rb
class RegistrationsController
include WhateverItIsThisIsDoing
end
# app/controllers/sessions_controller.rb
class SessionsController
include WhateverItIsThisIsDoing
end