我有提供商和患者模型,这两个模型都是belongs_to联系人。在提供者和患者编辑表单上,我使用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
如果第一个字段为空,则会添加错误消息,但它不会突出显示联系人[first_name]字段。
请帮我解决这个问题,可能有更好的方法来做这样的验证。
答案 0 :(得分:5)
您正在向错误的模型添加错误。方括号表示法仅用于命名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
fields_for调用检查传递给它的对象的错误,而不是任何父对象,因为它不知道这些关系。