微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

has_one 与 optional 的关联:true?

如何解决has_one 与 optional 的关联:true?

一个简单的预订应用中:

  • 用户选择座位时,会创建一个 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 关系的模型上,我认为您可以使用 required: false。所以最后,它看起来像这样:

class Appointment < ApplicationRecord
  has_one :temp_appointment,required: false
end
class TempAppointment < ApplicationRecord
  belongs_to :appointment,optional: true 
end

https://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_one

,

我切换了模型关联,结果奏效了。

AFAIK,它在应用程序的任何地方都没有区别。

一些有用的提示here

这是有效的:

class Appointment < ApplicationRecord
  has_one :temp_appointment 
end
class TempAppointment < ApplicationRecord
  belongs_to :appointment,optional: true 
end

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。