我有两个具有
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
我注意到,通过表单更改
name
模型的 url
或 Entity
属性将导致关联的 Location
记录被删除然后插入。这是一个不太理想的行为。
** 编辑 **
在进一步测试中,我注意到这些设置对 SQL 策略没有影响:
polymorphic
加入allow_destroy: true
dependent: :destroy
- 除了在 Locations
表中留下孤立记录default_scope
问题:
Entity
属性的更改会导致 Location
模型的更改?DELETE
/INSERT
,而不是UPDATE
?解决方案:将
update_only: true
添加到accepts_nested_attributes_for
:
class Entity < ActiveRecord::Base
...
accepts_nested_attributes_for :location, update_only: true
来源:
entity.update(location_attributes: { id: entity.location.id, ... })