从rails 4通知订阅调用帮助函数

时间:2015-07-17 06:53:18

标签: ruby-on-rails activesupport

我需要将所有控制器通知保存到数据库。我创建了一个/config/initializers/notifications.rb

ActiveSupport::Notifications.subscribe('process_action.action_controller') do |name, start, finish, id, payload|
  Action.create(
    action_type: name,
    user: current_user,
    data: payload
  )
end

但我收到错误:

undefined local variable or method `current_user' for main:Object

current_user是app / helpers / session_helper.rb的助手,它适用于整个应用程序。

我需要了解用户,他们采取了行动。如何在此上下文中调用current_user

3 个答案:

答案 0 :(得分:0)

  

current_user通常设置在你的application_controller中   应用。如果您使用像Devise这样的宝石来处理用户   例如,他们负责设置这种方法   你。

     

启动应用程序时会执行初始化程序代码   您的服务器(本地机器或远程服务器),因此您了解   “current_user”(了解“登录”用户)根本就没有   存在(尚)。

来源 - is it possible for current_user to be initializer, in rails 3?

希望这有帮助!

答案 1 :(得分:0)

  

current_user是app / helpers / session_helper.rb的助手,它适用于整个应用程序。

让我在这里纠正你。

您无法在初始化文件中访问current_user。初始化程序在应用程序启动时运行一次,因此不要期望像这样访问current_user

答案 2 :(得分:0)

我找到了解决方案:append_info_to_payload

class ApplicationController < ActionController::Base
  ...
  def append_info_to_payload(payload)
    super
    payload[:current_user] = current_user
  end

从这个回答: How to add attribute to existing Notifications payload?