如何将继承的控制器添加到父的before_action条件中

时间:2017-07-13 20:28:55

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

class ParentController < ApplicationController
  before_action admin_user, only: [:create, :update]
end

class ChildController < ParentController
  before_action admin_user #Also want to add :tweet

  def tweet
  end
end

在ChildController中我们可以使用

before_action admin_user, only: [:create, :update, :tweet]

但是如果我改变了父亲的before_action中的任何内容,那么它就不会在孩子身上得到更新。

2 个答案:

答案 0 :(得分:3)

不幸的是,实现ActiveSupport::Callbacks的方式不允许将其他操作轻松添加到before filter的配置中。你可以这样做:

class ParentController < ApplicationController
  AdminActions = [:create, :update]
  before_action :admin_user, only: AdminActions
end

class ChildController < ParentController
  before_action :admin_user, only: superclass::AdminActions + [:tweet]
end

答案 1 :(得分:3)

您可以在ChildController内部的块内调用该方法,而不是按名称传递它。这看起来像这样:

class ParentController < ApplicationController
  before_action admin_user, only: [:create, :update]
end

class ChildController < ParentController
  before_action(only: [:tweet]) { admin_user }

  def tweet
  end
end