Ruby DataMapper:与自定义名称的一对多关系?
我试图建立一个由两个实体组成的小模型。就本问题而言,请将其称为Ruby DataMapper:与自定义名称的一对多关系?,ruby,ruby-datamapper,Ruby,Ruby Datamapper,我试图建立一个由两个实体组成的小模型。就本问题而言,请将其称为A和BA与多个Bs有一对多的关系;这意味着每个B都属于A 在这种特殊情况下,我想将关系从B调用回A而不是A。我想我接近了以下几点: class A include DataMapper::Resource property :id, Serial has n, :bs end class B include DataMapper::Resource property :id, Serial
A
和B
<代码>A与多个B
s有一对多的关系;这意味着每个B
都属于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
这里重要的一点是属于B
中的owner'A'
行。有了这些,我可以成功地:
- 创建并保存
A的实例
- 查询
A
以查找其bs
,并获取一个空数组
- 创建
B
的实例,将其所有者
指定为我之前创建的A
然而,当我去保存B
的实例时,我遇到了麻烦——调用save
返回false
。如果我打印B
,我会看到它有两个属性:一个称为owner\u id
,另一个称为a\u id
要将关系从B
重命名回A
,我还需要对该模型执行哪些操作?这样的更名可能吗?想出来了。拥有实体(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
的实例