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

Jay*_*Jay 20 ruby ruby-on-rails devise ruby-on-rails-3

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

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

Moi*_*dar 50

=用户模型

def email_required?
  false
end

def email_changed?
  false
end

# For ActiveRecord 5.1+
def will_save_change_to_email?
  false
end
Run Code Online (Sandbox Code Playgroud)

=迁移

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
Run Code Online (Sandbox Code Playgroud)

  • 迁移可以是:`remove_index:users,:email` (2认同)

eug*_*gen 15

看看吧config/initializers/devise.rb.您可以更改默认的身份验证密钥,默认情况下是:email您想要的任何密钥,例如:

config.authentication_keys = [ :username ]

  • 不幸的是,删除`:validatable`会删除许多其他有用的东西,例如密码验证.在最新版本的Devise中,您还可以在模型上实现`email_required?`.如果返回"false",这将跳过电子邮件验证,请参阅https://github.com/plataformatec/devise/pull/545 (12认同)
  • 在这种情况下,删除:从模型中验证,你应该没问题.如果需要,添加您自己的自定义验证. (6认同)
  • 我不想删除validatable,因为,那么我们必须编写所有密码验证.我做了上面提到的两个更改(在initializers和email_required?方法中使用false),但它没有用.有任何想法吗? (2认同)