Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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 如何使用Sequel保存新创建的关联模型?_Ruby_Sequel - Fatal编程技术网

Ruby 如何使用Sequel保存新创建的关联模型?

Ruby 如何使用Sequel保存新创建的关联模型?,ruby,sequel,Ruby,Sequel,假设我有这样的东西: #模式: DB.create_表:事务处理 主键:id 外键:卡id,:卡 整数:金额 结束 DB.create_表:卡片可以 主键:id 外键:事务\u id,:事务 Intger:数字 结束 #型号: 类事务4000500060007000) 交易卡 反式保存 就目前而言,这不起作用,因为卡没有首先保存,并且Sequel会抛出一个“无主键”错误。如果我先保存卡,它将不会获得交易的id 基本上,我试图避免这种情况: #先保存而不关联,但这将分配主键 反式保存 卡.保存

假设我有这样的东西:

#模式:
DB.create_表:事务处理
主键:id
外键:卡id,:卡
整数:金额
结束
DB.create_表:卡片可以
主键:id
外键:事务\u id,:事务
Intger:数字
结束
#型号:
类事务
如何使其工作,从而保存
trans
card
,以及它们各自的关联

trans=Transaction.new(:amount=>100)
卡=新卡(编号=>4000500060007000)
交易卡
反式保存
就目前而言,这不起作用,因为
没有首先保存,并且Sequel会抛出一个“无主键”错误。如果我先保存
,它将不会获得
交易
的id

基本上,我试图避免这种情况:

#先保存而不关联,但这将分配主键
反式保存
卡.保存
#现在,手动创建关联
交易卡
card.trans=trans
#再次保存,这次使用关联
反式保存
卡.保存

您可能希望尝试将关联类型更改为类似于:

# Schema:
DB.create_table :transactions do
    primary_key :id
    Integer     :amount
end
DB.create_table :cards do
    primary_key :id
    foreign_key :transaction_id, :transactions
    Integer      :number
end

# Models:
class Transaction < Sequel::Model
    one_to_many :card
end
class Card < Sequel::Model
    one_to_one :transaction
end

这将允许所有相同的选项,以及允许(但肯定不要求)在多张卡上拆分交易。

谢谢,但我正在寻找一种解决方案,它不会将对象关联从
1:1
更改为
1:many
。为什么不合并该表呢?如果关系是1:1和1:1,那么就没有理由不创建一个包含两组列的表——它将表示完全相同的数据。这个示例很简单,我用它来说明这个问题。实际的模型要复杂得多。我假设是这样的,但在任何情况下,完全自反的1:1关系都与使用单个表相同。续集的文档本身说:“如果你想在两个模型之间建立1-1关系,你必须在一个模型中使用多对一,在另一个模型中使用一对一”“一对一关联可以看作是一对多关联的子集,但关联表中只能有0或1条记录。”
trans = Transaction.new(:amount => 100)
trans.save
trans.add_card(:number => 4000500060007000)