gpt4 book ai didi

ruby-on-rails - has_one 与可选 : true? 的关联

转载 作者:行者123 更新时间:2023-12-05 08:30:09 27 4
gpt4 key购买 nike

在一个简单的预订应用程序中:

  • 当用户选择座位时,将创建一个TempAppointment
  • 支付了座位费用后,将根据 TempAppointment 记录中的信息创建一个约会。

不能首先创建约会记录,因为乘客可能不付款,在这种情况下,TempAppointment 保持原样,并且永远不会创建关联的约会记录。

我的自然想法是 TempAppointment has_one Appointment(有效),但是当我添加 optional: true 时,我看到错误:

class TempAppointment < ApplicationRecord
has_one :appointment, optional: true
end

尝试创建一个新的临时约会

ta = TempAppointment.new(cruise_id: 1, passenger_id: 1, start_time: start_time, end_time: start_time + 3600)
ArgumentError: Unknown key: :optional. Valid keys are: :class_name, :anonymous_class, :foreign_key,
:validate, :autosave, :foreign_type, :dependent, :primary_key, :inverse_of, :required, :as, :touch

为什么 has_one 不能与 optional: true 一起工作?

最佳答案

has_one 默认是 optional: true(即使它不是这个方法的真正选项,我的意思是 has_one 绝不意味着它是必需的)

因此,如果您将 optional: true 设置为另一个模型,请注意,这意味着另一个模型不需要与第一个模型有关系。这是一种单向依赖。

# your model_a doesn't need any model_b to exist
class ModelA < ApplicationRecord
belongs_to :model_b, optional: true

[...]
end

# same for model_b, it can exist without model_a
class ModelB < ApplicationRecord
has_one :model_a

[...]
end

但如果你这样做

# your model_a has to belong to a model_b, otherwise it will fail
class ModelA < ApplicationRecord
belongs_to :model_b

[...]
end

# your model_b can still exist without model_a
class ModelB < ApplicationRecord
has_one :model_a

[...]
end

关于ruby-on-rails - has_one 与可选 : true? 的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65857128/

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