use*_*745 2 activerecord ruby-on-rails has-one ruby-on-rails-6
在一个简单的预订应用程序中:
TempAppointment会创建一个。无法首先创建约会记录,因为乘客可能不付款,在这种情况下,临时约会保持不变,并且永远不会创建关联的约会记录。
我的自然想法是 TempAppointment has_one Appointment (有效),但是当我添加时optional: true,我看到错误:
class TempAppointment < ApplicationRecord
has_one :appointment, optional: true
end
Run Code Online (Sandbox Code Playgroud)
尝试创建一个新的临时约会
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
Run Code Online (Sandbox Code Playgroud)
为什么不能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
Run Code Online (Sandbox Code Playgroud)
但如果你这样做
# 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7835 次 |
| 最近记录: |