我有一个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"}
发布于 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
并将其放入此块中:
with_options :unless => :user_type == "contact" do |user|
user.validates_presence_of :email
end
https://stackoverflow.com/questions/5773356
复制相似问题