【发布时间】:2015-11-10 08:57:37
【问题描述】:
我有一个网站,允许用户通过多种服务(LinkedIn、电子邮件、Twitter 等)登录。
我设置了以下结构来模拟User 及其多个身份。基本上,一个用户可以有多个身份,但只有一个给定类型(例如,不能有 2 个 Twitter 身份)。
我决定将其设置为多态关系,如下图所示。基本上有一个中间表 identities 将一个 User 条目映射到多个 *_identity 表。
关联如下(仅针对LinkedInIdentity显示,但可以外推)
# /app/models/user.rb
class User < ActiveRecord::Base
has_many :identities
has_one :linkedin_identity, through: :identity, source: :identity, source_type: "LinkedinIdentity"
...
end
# /app/models/identity
class Identity < ActiveRecord::Base
belongs_to :user
belongs_to :identity, polymorphic: true
...
end
# /app/models/linkedin_identity.rb
class LinkedinIdentity < ActiveRecord::Base
has_one :identity, as: :identity
has_one :user, through: :identity
...
end
我遇到的问题是User 模型。因为它可以有多个身份,所以我使用has_many :identities。但是,对于给定的身份类型(例如 LinkedIn),我使用了has_one :linkedin_identity ...。
问题在于has_one 语句是through: :identity,并且没有称为:identity 的单数关联。只有复数:identities
> User.first.linkedin_identity
ActiveRecord::HasManyThroughAssociationNotFoundError: Could not find the association :identity in model User
有什么办法吗?
【问题讨论】:
标签: ruby-on-rails activerecord models