通过关注关于该主题的优秀Railscasts 视频,我已经在我正在开发的应用程序中实现了 facebook 和 twitter 身份验证。
到目前为止,我已经将我的用户模型与Devise连接起来,并且当用户通过它们注册时,我已经构建了我的身份验证模型并记录了身份验证提供程序。它看起来像这样:
id | user_id | provider | uid
-----------------------------
1 | 1 | facebook | xyf
2 | 1 | twitter | pfr
3 | 2 | facebook | sdf
现在,我需要做的下一件事是存储这些omniauth 提供商给我的一些数据。例如,Facebook 为他们的 Facebook 个人资料提供用户性别和 url。另一方面,与 Twitter 的连接将提供有关用户的不同信息。
这让我相信我应该有两张表,一张用于 twitter 数据 (TwitterProfile),一张用于 facebook 数据 (FacebookProfile)。
那么我应该像这样扩展我的身份验证模型吗?
id | user_id | provider | uid | facebook_profile_id | twitter_profile_id
------------------------------------------------------------------------
1 | 1 | facebook | xyf | 1 |
2 | 1 | twitter | pfr | | 2
3 | 2 | facebook | sdf | 2 |
我的 models/user.rb 看起来像:
has_many :authentications, :dependent => :destroy
has_one :facebook_profile, :through => :authentications, :source => :facebook_profile
has_one :twitter_profile, :through => :authentications, :source => :twitter_profile
但是我的身份验证模型可以属于 3 个表吗?
belongs_to :user
belongs_to :facebook_profile, :class_name => "FacebookProfile"
belongs_to :twitter_profile, :class_name => "TwitterProfile"
似乎我走错了路,因为我的身份验证模型中有多余的空间,而关系似乎过于复杂。