如何解决has_one 与 optional 的关联:true?
在一个简单的预订应用中:
不能先创建约会记录,因为乘客可能不付款,在这种情况下,临时约会保持原样,并且永远不会创建关联的约会记录。
我的自然想法是 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 举报,一经查实,本站将立刻删除。