我的问题类似于this one,但没有答案。
我想在after_filter :identify_with_segment, only: [:create]
和RegistrationsController < Devise::RegistrationsController
添加SessionsController < Devise::SessionsController
。由于这两个控制器本身都继承自DeviseController
,我认为干这样做的方法是扩展DeviseController
并在那里定义方法。但是,我一直收到unitialized constant
错误。
我的代码:
class DeviseController < DeviseController
def identify_with_segment
..
end
end
我意识到这个类被定义的方式看起来错了。我也试过class DeviseController < Devise::DeviseController
,但这也不起作用。
任何人都可以解释扩展这些其他控制器所依赖的DeviseController
的正确方法吗?
答案 0 :(得分:1)
如果你想打开DeviseController
,你可以试试这个:
class DeviseController
def identify_with_segment
# ...
end
end
很多令人困惑的事情都是以严格干燥的名义进行的,这可能就是其中之一。有时候重复自己可以让事情变得清晰,可以理解为追随你的人。
另一种选择是将此功能置于问题中,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