如何对关联对象动态提供的属性使用 rails 验证

How to use rails validation for attribute provided dynamically from associated object

我有 User 模型,数据库字段为 field1 到 field10,其中之一是电子邮件字段。

我想像下面这样验证它,

validates :field1,
          format: { .. },
          if: Proc.new{ |i| i.active? }

但我的问题是,我不知道哪个是电子邮件字段,这取决于 UserStructure 对象的数据库字段为 email_field,这表明 User 中哪个是电子邮件字段table

validates Proc.new{ |i| i.user_structure.email_field },
          format: { .. },
          if: Proc.new{ |i| i.active? }

但以上不起作用,self 将始终是用户 class(为用户 class 加载验证时)

请指正或建议是否有其他选择。 提前致谢。

你需要 custom validation:

class User < ApplicationRecord
  validate :user_email_should_be_valid

  def user_email_should_be_valid
    email_field = user_structure.email_field
    email = send(email_field)

    if active? && !email.match?(EMAIL_REGEXP)
      errors.add(email_field.to_sym, "should be a valid email address")
    end
  end
end