私のomniauth
&omniauth-identity
ベースのアプリで、次の問題に遭遇しました:
Userdata を管理する 3 つのテーブルがあります。
# Stores User data _not_ authentication data
class User
include Mongoid::Document
has_many :identities
field :email, type: String
end
# Stores Authentication data (i.e. Facebook)
class Identity
include Mongoid::Document
belongs_to :user
end
# Stores Authentication data for omniauth-identity
class LocalIdentity < Identity
include OmniAuth::Identity::Models::Mongoid
field :email, type: String
end
問題は、 でメール フィールドを複製したことLocalIdentity
です。そのため、ユーザーがモデル内の電子メール アドレスを変更するたびに、User
電子メール アドレスを同期する必要があります。これは最初は些細なことのように見えますが、関連するフィールドが増えるとすぐに非常に面倒になります。
だから私の質問は: と の間の冗長性を取り除く方法はありUser
ますLocalIdentity
か?
解決策について熟考しているうちに、次の結論に達しました。
- マルチ継承はサポートされていないため、機能し
LocalIdentity < Identity, User
ません - every と write-troughに
LocalIdentity
埋め込まれUser
た値は機能しません b/c 検証は機能しません