繁体   English   中英

如何获得指向已删除记录的外键?

[英]How can I have foreign keys that point to deleted records?

我有一个Song模型和一个Audit模型。

删除Song ,我想创建一个Audit

if @song.destroy
  Audit.create(song: @song, deleted: true)

但这会导致如下崩溃:

ActiveRecord::InvalidForeignKey (PG::ForeignKeyViolation: ERROR:  insert or update on table "audits" violates foreign key constraint "fk_rails_cdcc9ea3cc"
DETAIL:  Key (song_id)=(305) is not present in table "songs".

如何获得带有指向不再存在的歌曲的ID的快乐保存?

外键旨在防止出现这种情况。 也许你可以实现软删除与像宝石acts_as_paranoid 软删除某些内容时,可以使用一列将其标记为已删除并将其从查询中排除,而无需实际将其从数据库中删除。 这样一来,您就可以继续从Audit模型访问Song记录,同时保持对用户隐藏。

如何使用回调before_destroy保存创建审核

打开应用程序/模型/Song.rb

# add callback
before_destroy :audit_song

# create method
def audit_song
  Audit.create(song: self, deleted: true)
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM