如何对关联对象动态提供的属性使用 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
我有 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