创建子项时需要父属性

Require a parent attribute when a child is created

我有一个带有属性名称(以及其他名称)的模型 Contact。创建联系人记录时,它们大多是在名称属性保留为空的情况下创建的。这需要被允许。 我的联系人 class 与 WaitListMembers

有关联
class Contact < ApplicationRecord
  has_many :waitlist_members
  # ...
end

class WaitlistMember < ApplicationRecord
  belongs_to :contact
  # ...
end

创建 WaitlistMember 后,我现在需要对联系人进行名称不能为空的验证。

我该如何完成?

您可以使用Module#delegate将方法调用委托给联系人:

class WaitlistMember < ApplicationRecord
  belongs_to :contact
  delegate :name, to: :contact, prefix: true
  validates :contact_name, presence: true
end

我会添加一个与联系人相关联的验证,然后在联系人本身上使用 lambda,或者如果有方法在 waitlist_members.any?

上有条件地应用验证
Class Contact
  #...
  validates :name, presence: true, if: ->(contact) { contact.waitlist_members.any? }
end

Class WaitlistMember
  #...
  validates_associated :contact
  #...
end