DataMapper-我可以避免使用中间表吗?

时间:2013-05-15 03:53:00

标签: ruby-datamapper

我是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日志,它似乎创建了两个表 - usersthird_party_accountsthird_party_account_users来加入这两个表。似乎不需要最后一个表 - third_party_account表只需要使用它的user_id字段直接映射到user表吗?我不小心在这里建立了多对多的关系吗?

1 个答案:

答案 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