如何在 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
我正在尝试在两个模型之间建立关联:
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