ruby-on-rails - Rails 中用户的备用电子邮件地址 - 我将如何验证唯一性,或者我的方法是否不正确?

标签 ruby-on-rails ruby-on-rails-3 database-design model

我的用户模型非常标准——它有一个 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/

相关文章:

ruby-on-rails-3 - Rails 3 命名空间路由

ruby-on-rails - 在 Rails 3 中用一个链接删除两条记录

ruby-on-rails-3 - 我需要直接在 Devise 下的控制台中对用户进行身份验证。我该怎么做?

sql-server-2005 - 模块化应用数据库结构

css - 如何让rails asset pipeline编译coffee脚本和scss文件?

ruby-on-rails - 带有 VI 命令的 Windows 最佳 Ruby 编辑器

mysql - 关系数据库设计 : How to design relationships with long paths?

sql-server - 有关具有庞大数据集的数据库结构的建议

ruby-on-rails - 子级的 after_destroy 回调保存了父级的依赖性,当父级被销毁时会导致问题

ruby-on-rails - 更新属性而不改变 updated_at 字段