Rails:在行动前干掉

时间:2016-03-15 13:53:36

标签: ruby-on-rails ruby ruby-on-rails-4

我有几个控制器:

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方法。如何清除此代码,以便FirstSecond类在一个位置使用before_action,而不是Third类?

我正在考虑某种类继承解决方案。有任何想法吗?在我的真实世界示例中,我有更多的类,每个类都有多个相同的before_actions

1 个答案:

答案 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)