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

时间:2017-03-24 20:19:13

标签: ruby datamapper ruby-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(country_id)上建立一个简单的关系。

我的第一个想法是在Person上添加has 1属性:

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

而不是Person表上的country_id,Datamapper在Country上创建了person_id

为了得到我需要的东西,我不得不反过来:

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

这样我在Person表上得到了country_id字段,但这对我来说没有任何意义。

我是否误解了某些内容,或者是否有其他方法可以建立此关联?

1 个答案:

答案 0 :(得分:0)

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

这个的另一面是"属于" - 那是你用外键放在Model上的东西。

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

[1, 2, 3] maps to 2 x 3 x 5 = 30
[3, 2, 1] maps to 5 x 3 x 2 = 30

由于人员中的外键,您使用"属于"。看起来像#34;有一个"同样的东西,但它不是。你通常只需要"有一个"在特殊情况下,如一对一的关系。

# Person
property :country_id, Integer