0

私のomniauthomniauth-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 検証は機能しません
4

0 に答える 0