我需要将所有控制器通知保存到数据库。我创建了一个/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
?
答案 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?