[英]Audited Gem current_user_method not working
我在应用程序中使用了Audited gem来跟踪用户日志。 除了当前的用户跟踪,一切都正常。
就我而言,我有2个模型: Instructor
和Student
。 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_user
为nil
,它将尝试查找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.