Rails Devise не может удалить пользователя - PullRequest
0 голосов
/ 13 февраля 2020

В разработке я могу удалять учетные записи, но в процессе производства это мне не позволяет. Я даже пытался удалить пользователей из консоли, но я получаю следующие ошибки:

Loading production environment (Rails 5.2.4.1)
irb(main):001:0> User.find_by(email: "XXX@protonmail.com")
D, [2020-02-13T19:00:27.815025 #4] DEBUG -- :    (4.6ms)  SET NAMES utf8mb4 COLLATE utf8mb4_bin,  @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'),  @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
D, [2020-02-13T19:00:27.830307 #4] DEBUG -- :   User Load (1.5ms)  SELECT  `users`.* FROM `users` WHERE `users`.`email` = 'XXX@protonmail.com' LIMIT 1
=> #<User id: 4706, email: "XXX@protonmail.com", created_at: "2020-01-08 23:46:23", updated_at: "2020-02-13 03:06:56", current_profile: 4030, admin: nil, mod: nil, banned: nil, polonly: nil>
irb(main):002:0> User.find_by(email: "XXX@protonmail.com").delete
D, [2020-02-13T19:00:30.525546 #4] DEBUG -- :   User Load (1.7ms)  SELECT  `users`.* FROM `users` WHERE `users`.`email` = 'XXX@protonmail.com' LIMIT 1
D, [2020-02-13T19:00:30.534763 #4] DEBUG -- :   User Destroy (7.6ms)  DELETE FROM `users` WHERE `users`.`id` = 4706
ActiveRecord::StatementInvalid: Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint fails (`website`.`profiles`, CONSTRAINT `fk_rails_e424190865` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)): DELETE FROM `users` WHERE `users`.`id` = 4706
    from (irb):2

Пользовательская МОДЕЛЬ

class User < ApplicationRecord
  after_create :skip_conf!
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable,
         :confirmable, :lockable, :timeoutable, :trackable
  has_many :profiles

end

Профиль МОДЕЛЬ

class Profile < ApplicationRecord
  validates :username, uniqueness: true, presence: true
  belongs_to :user
  has_one_attached :avatar
  has_many :posts
  has_many :votes
  has_many :activities
  has_many :comments
end

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Вы должны удалить записи, относящиеся к этому пользователю, в противном случае. как говорит ошибка, a foreign key constraint fails.

Добавление :dependent => :destroy должно исправить это

class User < ApplicationRecord
  after_create :skip_conf!
  devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :validatable,
     :confirmable, :lockable, :timeoutable, :trackable
  has_many :profiles, :dependent => :destroy

end
0 голосов
/ 13 февраля 2020

Существует ограничение внешнего ключа базы данных, которое препятствует удалению пользователя. Чтобы воспроизвести его в локальной настройке, создать пользователя и создать профили для этого пользователя, а затем попытаться удалить пользователя, он должен произойти сбой. Чтобы это исправить, добавьте on_delete:: cascade к ограничению внешнего ключа при переносе базы данных при создании профиля.

add_foreign_key :profiles, :users, on_delete: :cascade
...