ruby-on-rails - 如何对关联对象动态提供的属性使用 Rails 验证
问题描述
我的User
模型将 db 字段作为 field1 到 field10,其中一个是电子邮件字段。
我想像下面一样验证它,
validates :field1,
format: { .. },
if: Proc.new{ |i| i.active? }
但我的问题是,我不知道哪个是电子邮件字段,这取决于UserStructure
具有 db 字段的对象,因为email_field
它建议哪个是User
表中的电子邮件字段
validates Proc.new{ |i| i.user_structure.email_field },
format: { .. },
if: Proc.new{ |i| i.active? }
但上面不起作用,self 将始终是 User 类(在为 User 类加载验证时)
请纠正我或建议是否有任何替代方案。提前致谢。
解决方案
您需要自定义验证:
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
推荐阅读
- sql-server - SQL 删除扩展的 ASCII 字符但保留外来字符
- qt - 如何在设计模式下打开 qml 文件?
- c - 为什么从 sizeof 运算符调用时不调用 printf
- vba - 根据单元格值定义变量范围
- android - 如何在锁定屏幕上显示 android 推送通知?
- php - 如何输出关联数组的字符串列表?
- python-2.7 - Python PyMC3 中的 pm.Normal()
- odbc - SQLSetPos 中的游标状态无效
- angular - 如何将 dx-data-grid 的所有 dxi-column 移动到单独的组件?
- outlook - 从 Mac Outlook 更新 16.13.1 开始,加载项支持中断