Ruby on rails Rails-将租户保存在已审核中(以前作为已审核)
我已经安装和工作了。用户id已成功保存在审核表中,但我无法找到一种有效的方法来保存租户id(我使用范围设置了多租户)。我曾尝试使用自述文件中描述的相关审计技术,但这对我来说并不适用 我目前的解决方案是在每个模型中使用after_audit回调(可以通过Rails关注点实现),以获取最后一次审核并保存租户id:Ruby on rails Rails-将租户保存在已审核中(以前作为已审核),ruby-on-rails,ruby-on-rails-4,multi-tenant,acts-as-audited,Ruby On Rails,Ruby On Rails 4,Multi Tenant,Acts As Audited,我已经安装和工作了。用户id已成功保存在审核表中,但我无法找到一种有效的方法来保存租户id(我使用范围设置了多租户)。我曾尝试使用自述文件中描述的相关审计技术,但这对我来说并不适用 我目前的解决方案是在每个模型中使用after_audit回调(可以通过Rails关注点实现),以获取最后一次审核并保存租户id: def after_audit audit = Audit.last audit.tenant_id = self.tenant_id audit.save! end 虽然这
def after_audit
audit = Audit.last
audit.tenant_id = self.tenant_id
audit.save!
end
虽然这是可行的,但再次查询审计并更新它似乎是低效的。对我来说,在保存之前将租户id添加到审计中会更有意义,但我不知道怎么做。是否可以在保存之前将租户id添加到审核中?如果是的话,怎么办
编辑:
我还尝试将默认租户范围包括在审计模型中,但似乎没有调用:
audit.rb
class Audit < ActiveRecord::Base
default_scope { where(tenant_id: Tenant.current_id) }
class ApplicationController < ActionController::Base
around_action :scope_current_tenant
def scope_current_tenant
Tenant.current_id = current_tenant.id
yield
ensure
Tenant.current_id = nil
end
在这段代码中,我们得到了当前模型的最后一次审核。这样,我们只处理当前模型,不可能将审计添加到其他业务(据我所知)。我会将此代码添加到关注点中以保持其干燥
我仍然无法在审计模型中使用正常的Rails回调。目前我看到的唯一其他方法是分叉并修改gem源代码。我的任务是实现审计,并添加对组织的引用。迁移添加了以下行:
t.references :org, type: :uuid, index: true, null: true
为了保存一个组织id,我最后编写了一个初始值设定项-audited.rb。该文件如下所示:
Rails.configuration.after_initialize do
Audited.audit_class.class_eval do
belongs_to :org, optional: true
default_scope MyAppContext.context_scope
before_create :ensure_org
private
def ensure_org
return unless auditable.respond_to? :org_id
self.org_id = auditable.org_id
end
end
end
希望这有帮助 Marklar,你找到解决这个问题的方法了吗?@yaru没有,很遗憾我没有。我已经更新了我的问题,说明了我目前将如何实现,但我仍然对解决方案不满意。如果你明白了,请给我一个答案。谢谢
Rails.configuration.after_initialize do
Audited.audit_class.class_eval do
belongs_to :org, optional: true
default_scope MyAppContext.context_scope
before_create :ensure_org
private
def ensure_org
return unless auditable.respond_to? :org_id
self.org_id = auditable.org_id
end
end
end