[英]Rails/devise current_user accessed in model but it's nil
[英]Access Devise's current_user in Model
如何访问模型内的 Devises 'current_user' 对象? 我想在他们创建某些东西时自动将当前用户 ID 附加到记录中。 我知道我可以在控制器内部手动设置 user_id,但我觉得如果它由模型处理会更容易/更干净。
本质上,这种逻辑不属于模型,因此您最好通过模型中的函数或创建时传递current_user
。 这个答案总结了一下。
我知道,我知道,这不是你想要的答案。 不幸的是,它看起来更干净,但它增加了你真正不想要的模型的开销。
许多流行的 gem 需要访问模型中的current_user
,例如paper_trail 。
他们的方法从捕获current_user
的控制器开始。
class ApplicationController
before_action :set_paper_trail_whodunnit
end
触发:
def set_paper_trail_whodunnit
if ::PaperTrail.request.enabled?
::PaperTrail.request.whodunnit = user_for_paper_trail
end
end
和
def user_for_paper_trail
return unless defined?(current_user)
current_user.try(:id) || current_user
end
在从控制器保存current_user.id
后,触发审计操作,例如创建。
class Widget < ActiveRecord::Base
has_paper_trail
end
最终触发以下事件。
module PaperTrail
module Events
class Create < Base
def data
data = {
item: @record,
event: @record.paper_trail_event || "create",
whodunnit: PaperTrail.request.whodunnit
},
# .. more create code here
end
end
end
总之,一种方法如下。
before_action
保存current_user
current_user
存储在模型中稍后可以访问的某个位置,在paper_trail
的情况下是PaperTrail.request.whudunnit
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.