Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby DataMapper:与自定义名称的一对多关系?_Ruby_Ruby Datamapper - Fatal编程技术网

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
的实例