首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails Devise无法删除用户

问Rails Devise无法删除用户
EN

Stack Overflow用户
提问于 2020-02-14 03:10:02
回答 2查看 246关注 0票数 0

在开发中,我可以删除帐户,但在生产中,我不允许删除帐户。我甚至尝试从控制台中删除用户,但得到以下错误。

代码语言:javascript
复制
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

用户模型

代码语言:javascript
复制
class User < ApplicationRecord
  after_create :skip_conf!
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable,
         :confirmable, :lockable, :timeoutable, :trackable
  has_many :profiles

end

配置文件模型

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2020-02-14 03:28:22

数据库的外键约束阻止了用户的删除。要在本地设置中重现该用户,请创建用户并为该用户创建配置文件,然后尝试删除该用户,这应该会失败。要解决此问题,请在创建配置文件的数据库迁移中将on_delete::cascade添加到您的外键约束中。

代码语言:javascript
复制
add_foreign_key :profiles, :users, on_delete: :cascade
票数 0
EN

Stack Overflow用户

发布于 2020-02-14 04:35:57

您必须删除与该用户相关的记录,否则。如错误所示,a foreign key constraint fails。

添加:dependent => :destroy应该可以解决这个问题

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60214914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档