DataMapper:与自定义名称的一对多关系?

时间:2013-11-18 19:56:28

标签: ruby ruby-datamapper

我正在尝试构建一个由两个实体组成的小模型。出于此问题的目的,请将其称为ABA与多个B有一对多的关系;这意味着每个B belongs_toA

在这种特殊情况下,我想将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?这样的重命名是否可能?

1 个答案:

答案 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个实例。