设计 – 如何更改设置,以便电子邮件地址不需要是唯一的

我设置Devise使用用户名而不是电子邮件地址登录,因为我们的大量用户与他们的配偶共享同一个电子邮件地址。 这是我们服务的独特市场。 但每个配偶需要单独的账户来记录个性工具的结果。

数据库不再需要唯一的电子邮件地址,因此它将接受两个帐户的相同电子邮件地址。 但是,Devise仍然需要为每个帐户提供唯一的电子邮件地址。 是否有可以用来改变这个的设置或解决方法?

查看config/initializers/devise.rb 。 您可以更改默认的身份validation密钥,默认情况下为:email是您想要的任何内容,例如:

config.authentication_keys = [ :username ]

=用户模型

 def email_required? false end def email_changed? false end 

=迁移

 rails g migration update_index_on_users def up sql = 'DROP INDEX index_users_on_email' sql << ' ON users' if Rails.env == 'production' # Heroku pg ActiveRecord::Base.connection.execute(sql) end 

请在此处找到说明

如果您只想删除devise给出的uniqueness validation并保留其他uniqueness validation ,请参考此 (对于rails > = 4.1.6)。

所以,这真的很古老……但我想我会回应。

我正在使用旧版本的设计(1.4.9),但是,通过freenode上#rubyonrails的一些帮助,我发现你必须编辑lib / devise / models / validatable.rb:

 module Devise module Models module Validatable # All validations used by this module. VALIDATIONS = [ :validates_presence_of, :validates_uniqueness_of, :validates_format_of, :validates_confirmation_of, :validates_length_of ].freeze def self.included(base) base.extend ClassMethods assert_validations_api!(base) base.class_eval do validates_presence_of :email, :if => :email_required? # commented out so that we don't check for unique emails #validates_uniqueness_of :email, :case_sensitive => (case_insensitive_keys != false), :allow_blank => true, :if => :email_changed? validates_format_of :email, :with => email_regexp, :allow_blank => true, :if => :email_changed? validates_presence_of :password, :if => :password_required? validates_confirmation_of :password, :if => :password_required? validates_length_of :password, :within => password_length, :allow_blank => true end end end end end 

这还需要进入数据库并更改电子邮件列上的索引,该列设置为开箱即用的唯一。