登录后,我让我的SessionsController运行after_action来重置某些用户列。在另一个控制器中,我想在创建和更新时执行相同的after_action。
将相同的代码复制并粘贴到两个控制器中都很容易,但我知道有一天我会在一个控制器中进行更改并忘记更新另一个控制器。
有没有办法从不同的控制器调用与after_action相同的方法?
答案 0 :(得分:8)
有几种方法可以做你想做的事:
after_action
回调调用此方法after_action
回调中调用其方法实现:
class ApplicationController < ActionController::Base
# ...
def clean_user_columns
raise 'No user connected!' unless current_user.present?
do_some_stuff
end
用法:
class SessionsController < ApplicationController
after_action :clean_user_columns
实现:
# file created here: /lib/clean_user_columns_after_action.rb
# you will need to restart your server to see the changes of this file
module CleanUserColumnsAfterAction
def clean_user_columns
do_some_stuff
end
end
用法:
class SessionController < ApplicationController
include CleanUserColumnsAfterAction
after_action :clean_user_columns
结论:在我看来,选项#2 是要走的路:
include CleanCleanUserColumnsAfterAction
行。lib/controllers/
语句中将模块重命名为Controllers::CleanUserColumnsAfterAction
。