我有几个控制器:
class First < ApplicationController
before_action: do_this
before_action: do_this_too
end
class Second < ApplicationController
before_action: do_this
before_action: do_this_too
end
class Third < ApplicationController
end
其中两个控制器具有相同的before_action
方法。如何清除此代码,以便First
和Second
类在一个位置使用before_action
,而不是Third
类?
我正在考虑某种类继承解决方案。有任何想法吗?在我的真实世界示例中,我有更多的类,每个类都有多个相同的before_actions
答案 0 :(得分:3)
我认为最好保持原样。如果你将这些before_action
移动到一个模块或类似的东西,它将使你的控制器更难阅读和理解正在发生的事情。
换句话说,你会干掉你的控制器,但也会违反KISS原则(Keep It Simple)。
但是如果你想要这样做,请按照以下方式进行:
module SharedBeforeActions
def self.included(base)
base.before_action :do_this
end
def do_this
# Your filter definition here
end
end
class Third < ApplicationController
include SharedBeforeActions
end
最后你必须配置Rails来加载你的模块:
# config/application.rb
config.autoload_paths += %W(#{config.root}/lib)