我是DataMapper的初学者,有两个模型:
class ThirdPartyAccount
include DataMapper::Resource
property :access_token, String, :length => 500
belongs_to :user
end
class User
include DataMapper::Resource
property :id, Serial
property :first_name, String
has n, :third_party_accounts, :through => Resource
end
查看SQL日志,它似乎创建了两个表 - users
,third_party_accounts
和third_party_account_users
来加入这两个表。似乎不需要最后一个表 - third_party_account
表只需要使用它的user_id
字段直接映射到user
表吗?我不小心在这里建立了多对多的关系吗?
答案 0 :(得分:1)
这是由于这一行:
has n, :third_party_accounts, :through => Resource
:through => Resource
告诉DataMapper这是一个“拥有并且属于多人”的关系(每个第三方帐户属于多个用户,每个用户都有多个第三方帐户),这需要一个中间表。如果这只是一个有很多关系(每个用户有很多第三方帐户,但每个帐户只属于一个用户),你应该只使用:
Class User
...
has n, :third_party_accounts
end
有关详细信息,请参阅http://datamapper.org/docs/associations.html。