在开发中,我可以删除帐户,但在生产中,我不允许删除帐户。我甚至尝试从控制台中删除用户,但得到以下错误。
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发布于 2020-02-14 03:28:22
数据库的外键约束阻止了用户的删除。要在本地设置中重现该用户,请创建用户并为该用户创建配置文件,然后尝试删除该用户,这应该会失败。要解决此问题,请在创建配置文件的数据库迁移中将on_delete::cascade添加到您的外键约束中。
add_foreign_key :profiles, :users, on_delete: :cascade发布于 2020-02-14 04:35:57
您必须删除与该用户相关的记录,否则。如错误所示,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
endhttps://stackoverflow.com/questions/60214914
复制相似问题