0

我的 Rails 应用程序中有很多控制器,我需要before_filter在不同的控制器中使用之前的一些操作。before 过滤器将执行所有这些操作的相同代码。是否有一种干净的 DRY 方式(application_controller例如)来指定应该运行它的操作列表before_filter?我尝试before_filer在所有控制器中使用(9),但这看起来很重复,因为它是相同的代码。

4

1 回答 1

1

为什么不ApplicationController呢?如果您before_filter在应用程序控制器中定义任何内容,那么它将在每个请求上执行。

现在你说它看起来重复,但实际上没有。提及before_filter实际上application_controller.rb代表 DRY AKA,您不必before_filter在其他任何地方指定。

当然,并非所有 9 个控制器都会同时执行,因此这ApplicationController是一种首选方式

class ApplicationController < ActionController::Base
  ...
  before_filter :pre_execute_action
  ...
end
class MyController < ApplicationController
  ...
  skip_before_filter :pre_execute_action, except: [:methods_for_which_it_should_execute]
  ...
end

试试上面的代码作为参考

于 2016-08-31T11:50:29.837 回答