【发布时间】:2020-05-14 17:37:14
【问题描述】:
我有一个rails 模型Thing,它使用acts_as_tenant 将它与一家公司联系起来。这很好用,现在属于公司的用户只能访问与其公司关联的事物。
class Thing < ApplicationRecord
acts_as_tenant(:company)
belongs_to :company
end
现在我已向我的事物添加了一个 is_global 布尔字段。现在,我希望 Thing(通过acts_as_tenant)改为限定范围,以便用户可以访问他们公司的事物和任何全局事物。有没有办法配置acts_as_tenant 来启用这种行为?
我目前的解决方法是放弃此模型中的 acts_as_tenant(:company) 调用,而是创建一个新的默认范围:
default_scope { where('company_id = ? or is_global = true', ActsAsTenant.current_tenant.id) }
这似乎可以完成这项工作,但我担心我可能会在不知不觉中绕过acts_as_tenant 的一些好的功能。
【问题讨论】:
-
我认为 ActsAsTenant 中没有办法进行设置,但您通过这种方式实现了同样的目标。我见过的唯一真正的配置选项是 ActsAsTenant 强制始终设置租户的能力。但这并不影响你。顺便说一句,当您指定了
acts_as_tenant时,我认为您不需要belongs_to关系。
标签: ruby-on-rails acts-as-tenant