我正在使用acts_as_tenant gem 来管理多租户平台,同时使用设计来管理用户。我们系统中的用户acts_as_tenant 和belongs_to 组织。组织acts_as_tenant 和has_many 用户。
我们无法理解什么是确保在注册时创建用户、创建组织、创建租户(基于组织)以及保存当前租户的最佳方法,然后在用户上设置正确的tenant_id和组织模型。
问题是为了让用户有效,它必须有一个组织和一个租户。因此,在验证发生之前,我们必须创建组织和租户,我们正在尝试使用以下代码:
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable, :confirmable
acts_as_tenant(:tenant)
acts_as_paranoid
belongs_to :organization
before_validation :create_organization
def create_organization
if self.organization_id.nil?
org = Organization.new(name: self.email)
org.uuid = UUIDTools::UUID.random_create.to_s
self.organization_id = org.uuid
end
end
end
class Organization < ApplicationRecord
acts_as_tenant(:tenant)
self.primary_key = :uuid
has_many :users
before_validation :create_tenant
def create_tenant
puts 'making new tenant'
t = Tenant.new(:short_name => self.name)
end
end
class ApplicationController < ActionController::Base
set_current_tenant_through_filter
before_action :find_current_tenant
def find_current_tenant
unless current_user.nil?
set_current_tenant(current_user.organization.tenant)
end
end
end
但是在验证之前没有创建用户组织和租户,导致验证错误“租户必须存在”,“组织必须存在”。
这里有关于最佳实践的帮助吗?