我将Devise设置为使用用户名而不是电子邮件地址登录,因为我们的大量用户与他们的配偶共享相同的电子邮件地址。这是我们服务的独特市场。但夫妻双方都需要单独的账户来记录人格测试结果。数据库不再需要一个唯一的电子邮件地址,所以它将接受两个帐户相同的电子邮件addy。但是,Devise仍然需要每个帐户的唯一电子邮件地址。是否有一个设置或变通办法,我可以用来改变这一点?
vyswwuz21#
·在你的用户模型上使用这些方法(无论是什么模型,都是用Devise挂载的)注意,devise唯一性方法只是用一个if:修饰符定义的,所以你所做的就是强制它不运行
if:
def email_required? false end def email_changed? false end
字符串
def will_save_change_to_email? 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·确保重新实现验证以满足您的需求
kzmpq1sx2#
看看config/initializers/devise.rb。您可以将默认身份验证密钥(默认为:email)更改为您想要的任何内容,例如:config.authentication_keys = [ :username ]个
config/initializers/devise.rb
:email
config.authentication_keys = [ :username ]
j1dl9f463#
请查看说明here
gz5pxeao4#
如果你只想删除devise给出的uniqueness validation而保留其他的,参考this(对于rails >= 4.1.6)。
devise
uniqueness validation
rails
xxls0lw85#
所以,这真的很古老...但我觉得我应该回应一下我使用的是旧版本的devise(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
字符串这还需要进入数据库并更改电子邮件列的索引,该索引设置为开箱即用的唯一索引。
5条答案
按热度按时间vyswwuz21#
·在你的用户模型上使用这些方法(无论是什么模型,都是用Devise挂载的)注意,devise唯一性方法只是用一个
if:
修饰符定义的,所以你所做的就是强制它不运行字符串
型
删除强制唯一性的数据库索引: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
·确保重新实现验证以满足您的需求
kzmpq1sx2#
看看
config/initializers/devise.rb
。您可以将默认身份验证密钥(默认为:email
)更改为您想要的任何内容,例如:config.authentication_keys = [ :username ]
个j1dl9f463#
请查看说明here
gz5pxeao4#
如果你只想删除
devise
给出的uniqueness validation
而保留其他的,参考this(对于rails
>= 4.1.6)。xxls0lw85#
所以,这真的很古老...但我觉得我应该回应一下
我使用的是旧版本的devise(1.4.9),但是,通过freenode上的#rubyonrails中的一些帮助,我发现你必须编辑lib / devise / models / validatable.rb:
字符串
这还需要进入数据库并更改电子邮件列的索引,该索引设置为开箱即用的唯一索引。