我目前正在将我的Rails应用从单个租户(或无租户)重构为多租户应用。在做了大量的研究之后,我现在将使用范围而不是数据库模式,因为我觉得它更舒服,因为我认为它是我的应用程序的最佳解决方案。
de scoping的方法,如例如in a Railscast,使用tenant_id
列并使用default_scope
确保您只显示与当前租户相关的数据,如下所示:
default_scope { where(tenant_id: Tenant.current_id) }
这很好用,但当我环顾四周时,我也看到很多人告诉你不应该使用默认范围they are even evil。相反,您应该使用正常范围并在必要时应用它们。虽然这很有意义,但我理解使用默认范围可能会遇到的问题,这也会使应用程序更容易受到攻击,因为您可能只是忘记在某处应用范围。
所以我仍然不相信我应该使用默认范围。所以我的问题是:在Rails 4中使用或不使用默认作用域是最佳做法吗?
虽然我意识到这可能是一个意见问题,但我并不是在寻找关于默认范围的亲/讨论。如果我应该使用默认范围,我正在寻找更多信息。