after_save回调:如何仅在用户登录或注销时才采取行动?

时间:2015-12-16 10:15:28

标签: ruby-on-rails activerecord rails-activerecord

我正在编写一个函数来在用户登录或注销时执行某些操作。在我的模型中使用after_save回调,这就是我现在的做法:

after_save :send_message


def send_message

  #how to send message based on log in/out?

end

当用户登录/注销或更新帐户等时,会调用after_save。

如何仅在用户登录时触发此send_message?同样,只有当用户退出时?

2 个答案:

答案 0 :(得分:0)

在您的模型中,在回调后添加以下代码

skip_callback :create, :before, : send_message, if: :skip_some_callbacks

然后在你的控制器中,将skip_some_callbacks设置为false

def login
  ...
   user.skip_some_callbacks = false
end

答案 1 :(得分:0)

  

我的模型

中的回调

您找错了地方 - 您需要在调用相关的控制器方法后执行此操作。

我知道你没有使用Devise;如果你是,它有会话控制器createsdestroys会话(用户logs inlogs out时的IE)。

您可以为这些方法创建before_action or after_action callback

#app/controllers/sessions_controller.rb
class SessionsController < ApplicationController
    after_action :setup, only: [:create, :destroy]

    def create
       # logs in -- creates session
    end

    def destroy
       # logs out -- destroys session
    end

    private

    def setup
       # do something after login/logout
    end
end