新手问题 关于 ActiveAdmin 删除有关联关系的用户

summer_luck · 2020年03月31日 · 最后由 summer_luck 回复于 2020年03月31日 · 2660 次阅读

求大佬帮助,有偿帮助😭 报错信息: 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".

有关联数据所以删除不了,你可以把 products 里 user_id 等于 4 的产品都删掉或者设成 nil,再删用户

做假删除吧。

hging 回复

逻辑删除也是个办法,可我找不到 ActiveAdmin 的 Controller 也找不到 CURD 处理的地方,这个项目用的 ActiveAdmin 的 gem 源,只有 model 和 app 下面的 admin 有 adminUser 其他没有,不知道从哪里入手😭 :期待大佬回复

yfscret 回复

谢谢你的评论,我想做一下关联删除,可我找不到在哪里做,这个用的 ActiveAdmin

萌新不易,这个问题卡了好几天,各位大佬要是知道就评论吧,Thanks😶

感觉有几种做法,

一种是用这种方式来自动删除依赖 has_many :books, dependent: :destroy

另外是使用 https://github.com/rubysherpas/paranoia 来做软删除

hging 回复

非常感谢你的回复,请问 has_many :books, dependent: :destroy 这个语句在 model 里写吗?

summer_luck 回复

关系申明都是在 model 里的。可以先看看 Rails Guide,里边有很多值得参考的地方。

Catherine 回复

谢谢您的回复,我这样写的

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

这里说的很明确了

Catherine 回复

解决问题了,感谢你的帮助,thanks

summer_luck 关闭了讨论。 03月31日 21:29
summer_luck 重新开启了讨论。 03月31日 21:30

总结一下: 首先感谢各位的帮助。 删除关联关系用户需要一般情况两种选择 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,关联关系将会无效。 希望可帮到遇到同样问题的萌新

summer_luck 关闭了讨论。 03月31日 21:38
需要 登录 后方可回复, 如果你还没有账号请 注册新账号