求大佬帮助,有偿帮助 报错信息: PG::ForeignKeyViolation at /admin/admin_users/4 ERROR: update or delete on table "admin_users" violates foreign key constraint "fk_rails_b168afcbed" on table "products" DETAIL: Key (id)=(4) is still referenced from table "products".
逻辑删除也是个办法,可我找不到 ActiveAdmin 的 Controller 也找不到 CURD 处理的地方,这个项目用的 ActiveAdmin 的 gem 源,只有 model 和 app 下面的 admin 有 adminUser 其他没有,不知道从哪里入手 :期待大佬回复
感觉有几种做法,
一种是用这种方式来自动删除依赖 has_many :books, dependent: :destroy
另外是使用 https://github.com/rubysherpas/paranoia 来做软删除
非常感谢你的回复,请问 has_many :books, dependent: :destroy 这个语句在 model 里写吗?
谢谢您的回复,我这样写的
class AdminUser < ApplicationRecord
has_many :admin_users, dependent: :destroy
end
报错变成 PG::UndefinedColumn - ERROR: column admin_users.admin_user_id does not exist LINE 1: SELECT "admin_users".* FROM "admin_users" WHERE "admin_users... admin_user_id 是 Product 表里引用 admin_users 表外键关联
PG::UndefinedColumn - ERROR: column admin_users.admin_user_id does not exist
这里说的很明确了
总结一下: 首先感谢各位的帮助。 删除关联关系用户需要一般情况两种选择 1 逻辑删除,2 删除依赖 我在 model 定义了关联关系
has_many :product, dependent: :restrict_with_error
整理了一下关联的选项 :as :autosave :class_name :dependent :foreign_key :inverse_of :primary_key :source :source_type :through :validate 1、as:指明为多态关联 2、autosave:若设为 true,当 owner 实体做出某一操作时会自动保存或删除其关联实体的相应操作。 3、class_name:关联的实体名不能找到对应的实体,通过该属性设置实际的实体。 4、dependent:当 owner 实体被摧毁时,关联实体的行为: destroy:所有关联实体被摧毁 delete_all:所有关联实体被直接从数据库删除,不可恢复 nullify:外键被设为 null,不可恢复 restrict_with_exception:抛出异常提示 restrict_with_error:抛出错误提示 5、foreign_key:定义外键的列名 6、inverse_of:指明反向关联的实体 7、primary_key:指明关联项的 id 8、through:指明多对多的关系使用的第三方实体 9、validate:如果设为 false,关联关系将会无效。 希望可帮到遇到同样问题的萌新