如何在 DataMapper 中建立多对一关系

How to make a Many-To-One relationship in DataMapper

我正在尝试在两个模型之间建立关联:

class Person
   include DataMapper::Resource
   property :id, Serial
   property :name, String
end

class Country
   include DataMapper::Resource
   property :id, Serial
   property :name, String
end

我只需要一个关于 Person (a country_id) 的简单关系。

我的第一个想法是在 Person:

上加上 has 1 属性
class Person
   include DataMapper::Resource
   property :id, Serial
   property :name, String
   has 1, :country
end

Datamapper 在国家 person_id 上创建了 person_id,而不是在人物 table 上创建 country_id

为了得到我需要的东西,我不得不把它倒过来:

class Country
   include DataMapper::Resource
   property :id, Serial
   property :name, String
   has 1, :person
end

通过这种方式,我得到了 table 人的 country_id 字段,但这对我来说真的没有任何意义。

我是不是误会了什么,或者有其他方法可以建立这种联系吗?

每当模型 A "has" 模型 B(一个或多个)时,您将外键添加到模型 B。

另一方面是 "belongs to" - 这就是您使用外键放在模型上的内容。

我想在 DataMapper 中您不必显式添加外键列,但如果您愿意,您仍然可以这样做。

# Person
property :country_id, Integer

由于外键在 Person 上,您将使用 "belongs to"。好像和"has one"一样,其实不然。在一对一关系等特殊情况下,您通常只需要 "has one"。

# Person
belongs_to :country

# Country
has n, :people
# you could use has 1, :person if for some reason every country
# only had 1 person in it