![](/img/trans.png)
[英]How can I use two records from the same Rails model as foreign keys in a different Rails model?
[英]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.