2
我不确定我想要做的是错误的还是只是我的实现。多个在datamapper中有1个关联
我想要做的就是
有多个“具有1”的人之间和地址
我的模型是关系
class Person
include DataMapper::Resource
property id,serial
property name,String
has 1, :home, :model => 'Address'
has 1, :office, :model => 'Address'
has 1, :mail, :model => 'Address'
end
class Address
include DataMapper::Resource
property :id,Serial
property addr1, String
property country, String
end
这工作正常,在代码中,我可以分配和访问一个人的国家
a_person.home.country
但是当我保存然后ret从数据库ireve它不起作用。它混合了家庭,办公和邮件地址
我希望得到一个结构类似
CREATE TABLE `addresses` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`addr1` varchar(50) DEFAULT NULL,
`country` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
)
CREATE TABLE `persons` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
'home' int(10) unsigned ,
'office' int(10) unsigned ,
'mail' int(10) unsigned ,
PRIMARY KEY (`id`)
)
什么,我得到的是
CREATE TABLE `addresses` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`addr1` varchar(50) DEFAULT NULL,
`country` varchar(50) DEFAULT NULL,
`person_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `index_addresses_person` (`person`)
)
CREATE TABLE `persons` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
)
表结构对我来说并不重要,我想要的是家庭,办公室和邮件都是相同的对象类型,并且可以放在同一张表中。能够分配相同的地址实例来说,无论是家庭还是邮件,并且只在地址中存储一次而引用两次,这将是很好的。
P.S.人们和地址不是他们仅仅用作熟悉的例子的实际潜在客体。
编辑:我可以通过将4个n关联到地址来做我想要的。我会尝试编辑我的答案和结果。
是这个工作。这对我来说是非常直观的,这个人属于地址,但它完美地工作。谢谢 – 2011-04-21 02:06:39
谢谢!我在想和@GrantM一样的东西,这看起来完全倒退了...... – Jason 2012-12-06 23:17:11