Я тоже столкнулся с той же проблемой, сбросьте базу данных и заново создайте ее.
class User < ActiveRecord::Base
validates :email, :uniqueness => {:allow_blank => true}
end
надеюсь, что это сработает
Я использую devise (4.2.0) в рельсах (4.2.6).
В моем приложении я использую вложенные атрибуты в таблице пользователя и профиля. Мне нужно проверить пароль, только если я создаю новую запись, поле пароля не проверяется при обновлении созданных записей.
Мой файл user.rb :
class User < ActiveRecord::Base
has_one :profile
has_one :company_profile
accepts_nested_attributes_for :profile
attr_accessor :profile_updation
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
validates_presence_of :email, if: :email_required?
validates_presence_of :password, if: :password_required?
validates_confirmation_of :password, if: :password_required?
protected
def email_required?
true && profile_updation.blank?
end
def password_required?
!password.nil? || !password_confirmation.nil?
end
end
Когда я запускаю свое приложение, эта ошибка произошла:
create_table "пользователи" , сила : : каскадный сделать | t |
т . строка "email" , по умолчанию : "" , null : false
t . string "encrypted_password" , по умолчанию : "" , null : false
t . строка "reset_password_token"
t . datetime "reset_password_sent_at"
t . Дата и время "remember_created_at"
t . integer "sign_in_count" , по умолчанию : 0 , null : false
t . datetime "current_sign_in_at"
t . datetime "last_sign_in_at"
t . inet "current_sign_in_ip"
t . inet "last_sign_in_ip"
t . datetime "created_at" , null : false
t . datetime "updated_at" , null : false
t . string "first_name"
t . string "last_name"
t . строка "user_id" end
add_index "пользователи" , [ "электронная почта" ], имя : "index_users_on_email" , уникальная : правда , с помощью : : ВТКЕЕ
add_index "пользователи" , [ "reset_password_token" ], название : "index_users_on_reset_password_token" , уникальная : правда , с помощью : : ВТКЕЕ
add_index "профили" , [ "user_id" ], название : "index_profiles_on_user_id" , используя : : ВТКЕЕ
create_table "профили" , сила : : каскадный сделать | t |
т . string "company_name"
t . целая «страна»
t . целое «состояние»
t . целочисленный «бизнес»
t . строка "mobile_no"
t . datetime "created_at" , null : false
t . datetime "updated_at" , null : false
t . integer "user_id"
t . boolean "terms_conditions" end "index_users_on_email" DETAIL: Key (email) = () уже существует. : INSERT INTO «пользователи» («first_name», «last_name», «user_id», «created_at», «updated_at») VALUES ($ 1, $ 2, $ 3, $ 4, $ 5) RETURNING «id» prettyprint prettyprinted »>
rake db:drop
rake db:create
rake db:migrate
Я искал эту проблему, но я не могу ее решить.
Таблица пользователя и профиля в файле схемы
#one: {}
#two: {}
После того, как вы выполнили все шаги настройки Devise, пользователи верны:
one
и two
. Эти пользователи пустые. У них нет значений для любых атрибутов.A±
файле есть ограничение уникальности для email
столбца users
таблицы. Это приведет к тому, что ваша база данных вызовет ошибку, если пользователь с электронной почтой, уже содержащейся в существующем пользователе, должен быть сохранен.Это означает, что если вы не делаете записи приборов различными, выбирая разные письма для каждого или удаляя один из них, вы получите ошибку ограничения уникальности.