ruby-on-rails - has_one 关系如果超过一个则自动设置为 nil

标签 ruby-on-rails activerecord has-one

给两个模型,有一个has_one关联:

class ShopInfo
  belongs_to :shop
end

class Shop
  has_one :shop_info
end


s = Shop.create
ss1 = s.create_shop_info

在我的代码的其他地方

ss2 = s.create_shop_info 

在此之后,ss1.shop_id 被设置为 nil,因此 ss1 现在是一个孤立记录。

有什么方法可以删除以前的记录而不是将它们设置为零吗?

最佳答案

默认情况下,has_one 关联执行一个nullify。添加 dependent::destroy 解决了问题。

class Shop
  has_one :shop_info, dependent: :destroy
end

如果有人想要更多信息,has_one 替换记录的 ActiveRecord 代码是这样的:

https://github.com/rails/rails/blob/v4.2.6/activerecord/lib/active_record/associations/has_one_association.rb#L24-L51

但是如果您在关联中添加一个dependent 选项,也会执行delete 方法:

https://github.com/rails/rails/blob/v4.2.6/activerecord/lib/active_record/associations/has_one_association.rb#L7-L22

关于ruby-on-rails - has_one 关系如果超过一个则自动设置为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36893028/

相关文章:

ruby-on-rails - Rails 中的可选或条件模型关联

ruby-on-rails - Bundle Install 不会更新 eventmachine gem

ruby-on-rails - 防止 Rails 5 中重复的 has_many 记录

ruby-on-rails - 我可以将模型及其关联之一转换为 YAML 格式吗?

ruby-on-rails - 无法删除记录,用户

ruby-on-rails - Rails 中一对一关系的奇怪之处

ruby-on-rails - html.erb 中可以访问哪些 Controller 数据?

ruby-on-rails - rbenv、 Homebrew 软件和 postgres9.3 : pg upgrade form 9. 2 损坏了 pg

sql - rails : Get related records having belonging to category having a particular enum attribute

ruby-on-rails - Rails 嵌套 has_one : cannot delete existing record