gpt4 book ai didi

ruby-on-rails - 将 Rails has_one 关系修改为 UPDATE 而不是 DELETE 然后 INSERT

转载 作者:行者123 更新时间:2023-12-01 11:38:12 25 4
gpt4 key购买 nike

我有两个具有has_one 关系的模型:

class Entity < ActiveRecord::Base

has_one :location, as: :locatable, dependent: :destroy
accepts_nested_attributes_for :location, allow_destroy: true

...
default_scope {joins(:location).includes(:location)}
...

# has a properties 'name' and 'url'

end

class Location < ActiveRecord::Base
belongs_to :locatable, polymorphic: true

# has a property named 'address'

end

我注意到通过表单更改 Entity 模型的 nameurl 属性将导致关联的 Location 要删除然后插入的记录。这是一个不太理想的行为。

** 编辑 **

在进一步的测试中,我注意到这些设置对 SQL 策略没有影响:

  • 多态连接
  • allow_destroy: true
  • dependent: :destroy - 除了在 Locations 表中留下孤立记录
  • default_scope

问题:

  1. 为什么更改 Entity 属性会导致更改 Location 模型?
  2. 为什么执行的是DELETE/INSERT,而不是UPDATE

最佳答案

解决方案:将update_only: true添加到accepts_nested_attributes_for:

class Entity < ActiveRecord::Base
...
accepts_nested_attributes_for :location, update_only: true

来源:

关于ruby-on-rails - 将 Rails has_one 关系修改为 UPDATE 而不是 DELETE 然后 INSERT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25149280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com