我有供应商和患者模型,两者都属于contact_to contact.在提供者和患者编辑表单上,我使用fields_for:contact来呈现关联的联系人字段.
问题在于我想对provider.contact和patient.contact对象使用不同的验证规则,即我想在患者编辑表单中验证联系人first_name的存在,但我不想在提供者编辑中验证first_name的存在形成.
我尝试在患者模型中添加动态验证规则:
validate :contact_first_name_blank
def contact_first_name_blank
errors.add('contact[first_name]', 'can not be blank') if contact.first_name.blank?
end
Run Code Online (Sandbox Code Playgroud)
它在第一个空字段为空时添加错误消息,但它不会突出显示联系[first_name]字段.
请帮我解决这个问题,可能有更好的方法来做这样的验证.
您正在向错误的模型添加错误.方括号表示法仅用于命名HTML表单元素,而不是错误结构,据我所知,由属性名称指定.
validate :contact_first_name_blank
def contact_first_name_blank
if (contact.first_name.blank?)
errors.add_to_base('Contact first name can not be blank')
contact.errors.add('first_name', 'can not be blank')
end
end
Run Code Online (Sandbox Code Playgroud)
fields_for调用检查传递给它的对象的错误,而不是任何父对象,因为它不知道这些关系.