Diseño: cómo cambiar la configuración para que las direcciones de correo electrónico no tengan que ser únicas

Configuré Devise para iniciar sesión con un nombre de usuario en lugar de una dirección de correo electrónico porque un número significativo de nuestros usuarios comparten la misma dirección de correo electrónico con su cónyuge. Es un mercado único al que servimos. Pero cada cónyuge necesita cuentas separadas para registrar los resultados del instrumento de personalidad.

La base de datos ya no requiere una dirección de correo electrónico única, por lo que aceptará la misma dirección de correo electrónico para dos cuentas. Sin embargo, Devise todavía requiere una dirección de correo electrónico única para cada cuenta. ¿Hay alguna configuración o solución que pueda usar para cambiar esto?

Busque en config/initializers/devise.rb . Puede cambiar la clave de autenticación predeterminada, que de forma predeterminada es :email será lo que desee, por ejemplo:

config.authentication_keys = [ :username ]

= Modelo de usuario

 def email_required? false end def email_changed? false end 

= Migración

 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 

Por favor encuentre las instrucciones aquí

Si solo desea eliminar la uniqueness validation proporcionada por el devise y conservar las otras, consulte esto (para rails > = 4.1.6).

Entonces, esto es realmente viejo … pero pensé que respondería.

Estoy usando una versión anterior de devise (1.4.9), pero, a través de alguna ayuda en #rubyonrails en freenode, descubrí que tienes que editar 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 

Esto también requirió ingresar a la base de datos y cambiar el índice en la columna de correo electrónico, que se configura como único fuera de la caja.