创建子项时需要父属性
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
我有一个带有属性名称(以及其他名称)的模型 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