在删除并创建新的作者记录后,Rails更新books表中的author_id

vis*_*nth 0 ruby activerecord ruby-on-rails associations

这是Author模型和Book模型

class Author < ApplicationRecord
  has_many :books, dependent: :destroy
end

class Book < ApplicationRecord
  belongs_to :author
end
Run Code Online (Sandbox Code Playgroud)

我创建了2位作者(author1和author2),并为每位作者添加了2本书。

之后,我删除了author1并创建了一个新作者(author3)。现在,我想给author3两本author1的书。

是否有ActiveRecord方法用新作者来更新书籍author_id?

小智 5

我建议您先创建第二个作者。如果您先删除第一位作者,则将无法获取与第一位作者相关的书籍。

寻找新作者

new_author = Author.find(new_id)
Run Code Online (Sandbox Code Playgroud)

将书籍从旧作者改成新作者

old_author = Author.find(old_id)
old_author.books.update_all(author_id: new_author.id)
Run Code Online (Sandbox Code Playgroud)

删除旧作者

old_author.destroy
Run Code Online (Sandbox Code Playgroud)

这将确保不会丢失任何数据,也不会出现任何孤立数据。