私はacts_as_tenant gemを使用してマルチテナンシーを管理しており、deviseを使用してユーザーを管理しています。
テナント用のデバイス ユーザー モデルとアカウント モデルのみをセットアップしました。複数のテナントに対してユーザーを作成できます - これはすべて正常に機能しますが、異なるテナント ID に対して同じ電子メールで 2 人のユーザーを作成しようとすると、一意性エラーが発生します。説明したように、validates_uniqueness_to_tenant オプションを使用しています。
ユーザーモデル
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :email, :password, :password_confirmation, :remember_me
acts_as_tenant(:account)
validates_uniqueness_to_tenant :email
end
アカウント モデル
class Account < ActiveRecord::Base
attr_accessible :name
end
アプリケーションコントローラー
class ApplicationController < ActionController::Base
set_current_tenant_by_subdomain(:account, :subdomain)
protect_from_forgery
end
これはacts_as_tenantのすべてのドキュメントに基づいて動作するはずですが、代わりにデバイスレベルで何かをオーバーライドする必要がありますか?
編集:頭を悩ませて少し休憩した後、問題は、デフォルトでDeviseがメール列に一意のインデックスを追加したためだと思います。これは明らかにacts_as_tenantがやりたいこととは一致しません...インデックスを削除して、Deviseが吐くかどうかを確認します。
EDIT 2: OK、今のところ正式にこれをあきらめました。メイン サイトの手動認証を行いましたが、acts_as_tenant で適切に機能しています。act_as_tenant と Devise の間の非互換性は、あるレイヤーでのみ想定できます。この段階でそれを見つけることはできません。