首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Rails -跳过子类的rails验证

Rails -跳过子类的rails验证
EN

Stack Overflow用户
提问于 2011-04-25 05:28:31
回答 1查看 8.2K关注 0票数 19

我有一个User类和一个Contact,其中Contact是User的子类。这两个类都存储在用户表中。

我的联系人可能有电子邮件地址,也可能没有电子邮件地址,而我的用户需要电子邮件地址(我的用户模型定义中有validates_presence_of :email )。

我的推理是,联系人是由用户输入的,当他们声明自己的个人资料时,他们可能会成为用户。

  • 首先,是否可以按照我的方式定义用户和联系人?
  • 其次,如何跳过联系人模型中的validate_presence_of email验证?

(我在rails 2.3.8上)

谢谢!

更新:

  • 似乎单表继承的目的正是我所需要的
  • 跳过对联系人表中是否存在电子邮件的验证的正确方法如下:

validates_presence_of :email, :unless => Proc.new {|user| user.type == "Contact"}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-25 05:32:24

听起来您应该将用户和联系人抽象到两个表中,而不是试图将它们合并到一个表中。虽然联系人可以成为用户,但这并不意味着他们会(我认为?)。

这也可以解决您的validate_presence_of :email问题,因为contact表/模型甚至没有该字段。我相信,这也会在以后缓解潜在的性能问题。你不会想要有一大堆的联系人来找一个注册用户。

如果你执意要在一个表中做这件事,我相信你可以这样做:

validates_presence_of :email, :unless => Proc.new {|user| user.type == "Contact"}

这是假设您有一个user_type列,但您可以根据如何确定User是否为Contact来替换它。

更新

以下是正确验证模型的方法:从模型中删除validates_presence_of并将其放入此块中:

代码语言:javascript
复制
with_options :unless => :user_type == "contact" do |user|
   user.validates_presence_of :email
end
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5773356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档