我的用户模型非常标准——它有一个 email:string 列,我在用户模型中使用 validates :email, :unique => true 来验证它的唯一性。
为了允许用户使用备用电子邮件地址,我创建了一个新模型:
AlternateAddress,包含列 user_id:integer 和 email:string。
一个用户有_多个备用地址,一个备用地址属于一个用户。 此设置构成了一个简单的嵌套表单,如下所示:http://railscasts.com/episodes/196-nested-model-form-part-1 .
我意识到我需要“一起”验证 2 个 email:string 列(一个在 User.rb 中,另一个在 AlternateAddress.rb 中)- 因此在任何地方都没有重复的电子邮件地址。
我该怎么做?或者,我的整个方法都失效了吗?
提前致谢。
最佳答案
您可以添加一个自定义验证器,以便它先检查用户表,然后再检查备用地址表:
class User < ActiveRecord::Base
validate :email_uniqueness # custom
validates :email, :uniqueness => true
def email_uniqueness
if AlternateAddress.find_by_email(self.email)
self.errors.add(:email, "is already in use by another account")
end
end
end
您可以添加类似于 AlternateAddress 字段的内容。该方法是一个自定义验证器来处理备用地址,但您仍然需要普通的 Rails 验证器来确保用户之间的唯一性。
关于ruby-on-rails - Rails 中用户的备用电子邮件地址 - 我将如何验证唯一性,或者我的方法是否不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11821654/