相关模型的自定义验证

And*_*nih 2 ruby-on-rails

我有供应商患者模型,两者都属于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]字段.

请帮我解决这个问题,可能有更好的方法来做这样的验证.

tad*_*man 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
Run Code Online (Sandbox Code Playgroud)

fields_for调用检查传递给它的对象的错误,而不是任何父对象,因为它不知道这些关系.