相关模型的自定义验证

时间:2010-01-07 15:46:55

标签: ruby-on-rails

我有提供商患者模型,这两个模型都是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]字段。

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

1 个答案:

答案 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调用检查传递给它的对象的错误,而不是任何父对象,因为它不知道这些关系。