更改primary_key值是否相当于destroy?

时间:2016-08-28 15:12:22

标签: ruby-on-rails database database-migration

考虑使用primary_key模型title以方便设置为id列,而不是默认列has_many :through。请参阅this articleguides.rubyonrails.org

假设此模型与第二个Reader模型之间存在dependent: :destroy关联。在BookReader模型中使用reader可以保证删除book所有关联都将被删除,并删除Book所有关联将是删除。

title模型记录了100本阅读量最多的书籍,每月更新一次列表。
更新列表将涉及更新purchasingstitle属性,因此可能会发生前一个月的foreign_key排名为100,下个月可能会排在100以外因此没有数据库。

作为基于不再存在的Book(第101本书名称)的关联读者/书籍,该关联本身会被删除吗?
或者协会会以某种方式存活,因为Bookids中没有有效删除而是保留了100个项目及其原始{{1}})?

1 个答案:

答案 0 :(得分:0)

答案是否定的。
我使用关系模型和M.Hartl's tutorial中描述的has_many:through关联来复制条件:用户可以使用关系关联跟随(并且后面跟着)另一个用户。

我有100个用户并创建了用户101和102(id 101和102)。
我关注user 1作为user 101,而user 1跟随user 101
我将user 101的ID更改为103。

此更改后user 1关系减少2(-1个跟随者和-1个粉丝)。
Relationship.count仍然相同:User 1User 101之间的关系未被销毁,尽管User.find(101)报告"无法找到ID = 101&的用户#34;

然后我将user 102的ID更改为101 我的鄙视user 102继承了原始user 101的关系,而user 1恢复了失去的关系。

因此,总之,关联基于主键。
如果更改了记录的主键值,则该记录的原始关联不会更多地链接到新的主键值。

让我感到困惑的是,尽管在用户模型中有一条has_many :relationships, dependent: :destroy行,并且旧的id指的是数据库中不再存在的用户,但这些关联并未被销毁。