gpt4 book ai didi

ruby-on-rails - 使用未保存的模型建立一个通过与多个通过

转载 作者:行者123 更新时间:2023-12-03 18:03:56 24 4
gpt4 key购买 nike

我写了一个 gem,允许将 Google 电子表格转换为 Rails 模型。这个过程的顺序包括创建所有模型,然后连接它们的关联,然后保存所有模型。它支持所有可用的关联类型,并且在每种情况下都只有一种,创建模型,建立关联,然后保存模型正常工作。异常(exception)情况如下:

我有一个简单的 has_one, through关联(为简洁起见省略了属性访问):

class Left < ActiveRecord::Base
has_many :middles, dependent: :destroy
has_many :rights, through: :middles
end

class Right < ActiveRecord::Base
has_one :middle, dependent: :destroy
has_one :left, through: :middle
end

class Middle < ActiveRecord::Base
belongs_to :left
belongs_to :right
end

根据关联分配的哪一侧,我发现了一些不一致的行为:

从右到左分配:
left = Left.new
right = Right.new
left.rights << right
left.middles #[]
right.middle #nil
left.save!
left.middles # <Middle theme_id: 1, archive_resource_id: 1 >

从右到左分配:
left = Left.new
right = Right.new
right.left = left
left.middles #[]
right.middle <Middle theme_id: nil, archive_resource_id: nil >
right.save!
right.middle # <Middle theme_id: nil, archive_resource_id: 1 >

这种行为似乎非常不一致。为什么是这样?为什么这是一种方式而不是另一种方式?有没有办法在两个未保存的记录的情况下建立这种关系?

我明白显而易见的解决方案是在建立关系之前保存所有内容,但如上所述,我需要在建立关联时不保存模型,并且在所有其他类型的关联中,这方面没有问题。

最佳答案

根据 Rails API 文档( link )-

If you are using a belongs_to on the join model, it is a good idea to set the :inverse_of option on the belongs_to, which will mean that the following example works correctly (where tags is a has_many :through association):



所以@Kaleidoscope 设置的关联实际上是正确的。

关于ruby-on-rails - 使用未保存的模型建立一个通过与多个通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19726923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com