首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails has_one :通过关联:设置关联对象将删除已连接的对象

Rails has_one :通过关联:设置关联对象将删除已连接的对象
EN

Stack Overflow用户
提问于 2017-05-01 19:27:00
回答 2查看 283关注 0票数 1

我有过

代码语言:javascript
运行
复制
class CarpoolGroup < ActiveRecord::Base
  has_many :cars
end

class Car < ActiveRecord::Base
  belongs_to :carpool_group
  has_many :car_types
end

class CarType < ActiveRecord::Base
  belongs_to :car
  has_one :carpool_group, through: :car
end

当我开始

car_type.carpool_group = nil

或者当我保存carpool_group时,连接的Car对象将从DB中删除。在设置DELETE from "cars" where ...之后,我会看到SQL car_type.carpool_group = nil

如何通过关联保持has_one并避免此删除?

EN

回答 2

Stack Overflow用户

发布于 2017-05-01 23:18:20

Rails总是为through关联删除中间记录,因为Rails并不认为中间记录是独立的实体,而是作为实体之间的连接器。

在您的情况下,您有两个选择:

选项1:

carpool_group = nil上直接调用car

代码语言:javascript
运行
复制
cat_type.car.carpool_group = nil

备选方案2:

has_one替换为delegate

代码语言:javascript
运行
复制
class CarType < ActiveRecord::Base
  belongs_to :car
  delegate :carpool_group, to: :car, allow_nil: true
end

当原始代码cat_type.carpool_group = nil不会删除汽车。

票数 1
EN

Stack Overflow用户

发布于 2017-05-01 20:06:55

您需要指定CarType与Car的关联。在has_one解密之前

代码语言:javascript
运行
复制
class CarType < ActiveRecord::Base
  belongs_to :car
  has_one :carpool_group, through: :car
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43725199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档