我正在尝试构建一个由两个实体组成的小模型。出于此问题的目的,请将其称为A
和B
。 A
与多个B
有一对多的关系;这意味着每个B
belongs_to
和A
。
在这种特殊情况下,我想将B
之间的关系称为A
以外的a
。我想我接近以下内容:
class A
include DataMapper::Resource
property :id, Serial
has n, :bs
end
class B
include DataMapper::Resource
property :id, Serial
belongs_to :owner, 'A'
end
这里重要的一点是belongs_to :owner, 'A'
中的B
行。有了这个,我可以成功:
A
A
bs
并获取空数组B
的实例,将其owner
指定为我之前制作的A
但是,当我去保存B
的实例时,我遇到了麻烦 - 调用save
会返回false
。如果我打印B
,我会看到它有两个属性:一个名为owner_id
,另一个名为a_id
。
我还需要使用此模型将关系从B
重命名为A
?这样的重命名是否可能?
答案 0 :(得分:2)
想出来。拥有实体(A
)需要明确指定它想要为关系创建的子键:
class A
include DataMapper::Resource
property :id, Serial
has n, :bs, :child_key => [ 'owner_id' ]
end
class B
include DataMapper::Resource
property :id, Serial
belongs_to :owner, 'A'
end
通过此更改,我只会在B
上看到一个关系属性,并且我能够保存我创建的B
个实例。