除测试模式外,所有代码在所有环境中均能正常工作。在测试模式下,该类是TopLevel类的子类,而不是其模块类。
# app/controllers/base_controller.rb
class BaseController < ApplicationController
end
# app/controllers/api/base_controller.rb
module API
class BaseController < BaseController
end
end
# app/controllers/api/v2/base_controller.rb
# style 1
# this style cause problem when run rspec, API::V2::BaseController now
# subclass from BaseController, which should be API::BaseController
module API
module V2
class BaseController < BaseController
end
end
end
# style 2
# this style make subclass from correct class, but kinda ugly in code.
module API
module V2
class BaseController < API::BaseController
end
end
end
解决方案1: 遵循样式2,但我不喜欢它,并寻求更好的方法。
解决方案2 不要在TopLevel中使用BaseController,而是将其重命名为OtherBaseController之类的其他名称,因此我可以编写样式1。因为Rails在TopLevel中找不到BaseController。