繁体   English   中英

经审核的宝石current_user_method无法正常工作

[英]Audited Gem current_user_method not working

我在应用程序中使用了Audited gem来跟踪用户日志。 除了当前的用户跟踪,一切都正常。

就我而言,我有2个模型: InstructorStudent Instructor将是current_admin_user ,我需要手动查找该学生。

为了解决此问题,我尝试覆盖current_user_method并在初始化器中创建具有以下内容的audited.rb文件:

Audited.current_user_method = :current_admin_user

这工作正常,但是当我使用诸如current_user_or_student类的任何其他方法时...

Audited.current_user_method = :current_user_or_student

application_controller.rb ...

def current_user_or_student
  current_admin_user || InstructorStudent.find_by_id(id)
end

它不会进入此方法,即使current_admin_user也未存储在审核中。

application_controller.rb重写我的current_user_or_student方法时为什么不调用它?

最后,我解决了我的问题,我正在使用STI(单表继承)。 我的其他讲师控制器不是从应用程序控制器继承的。 所以我的current_user_or_student没有被要求进行讲师登录。

为了克服这个问题,我创建了一个名为audited_user.rb控制器关注audited_user.rb

并关注以下方法

def current_user_or_student
  current_admin_user || InstructorStudent.find_by_id(id)
end

并在我的讲师基础控制器和应用程序控制器中都包含了此问题。 现在一切正常,我的审核用户也可以正确保存。

我希望这可以节省其他任何一天。

您已经这样定义了current_user_or_student

def current_user_or_student
  current_admin_user || InstructorStudent.find_by_id(id)
end

假设current_admin_usernil ,它将尝试查找InstructorStudent 您正在使用find_by_id ,如果找不到具有该ID的InstructorStudent ,它将返回nil 这很可能正在发生。 从这个来源尚不清楚什么是id您确定将其设置为可以在执教instructor_students找到的ID吗? 我鼓励您进行以下调试:

def current_user_or_student
  current_admin_user || InstructorStudent.find(id)
end

如果方法的条件落入InstructorStudent.find分支并且找不到id则将引发错误。 如果我的假设是正确的,这将证明找不到ID,因此您的原始代码返回nil (而此更新的代码现在会出错)。 错误消息还将告诉您可以用于进一步调试的id的值。

或者,您可以通过运行您希望被审核但未被审核的请求,然后检查服务器日志,来在不更改代码的情况下进行调试。 您将看到查询在此处运行,并且也可以通过这种方式进行调试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM