我有一个User
模型,其数据库字段是从field1到field10,其中之一是电子邮件字段。
我想像下面那样验证它,
validates :field1,
format: { .. },
if: Proc.new{ |i| i.active? }
但是我的问题是,我不知道哪个是电子邮件字段,它取决于UserStructure
对象,该对象的数据库字段为email_field
,这暗示了User
表中的哪个电子邮件字段>
validates Proc.new{ |i| i.user_structure.email_field },
format: { .. },
if: Proc.new{ |i| i.active? }
但是上面的方法不起作用,self始终是User类(在加载User类的验证时)
请纠正我或建议是否有其他选择。 提前致谢。
答案 0 :(得分:1)
您需要一个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