Ruby on rails 如何在不调用的情况下将子记录的id保存在父记录中。是否再次保存?

Ruby on rails 如何在不调用的情况下将子记录的id保存在父记录中。是否再次保存?,ruby-on-rails,associations,rails-activerecord,ruby-on-rails-5.2,ruby-on-rails-5.1,Ruby On Rails,Associations,Rails Activerecord,Ruby On Rails 5.2,Ruby On Rails 5.1,我有一个问题,遗留代码在Rails 5.1之前的保存之后的回调中调用.save,但是由于保存的\u更改为\u属性如何替换属性更改?在回调之后的中,调用保存两次是个问题(.save影响.changes) 我现在需要复制相同的行为,而无需调用.save两次 在我的Rails 5.1.7应用程序中(准备5.2升级): 你可以看到MyModel首先被插入,没有其他模型,然后其他模型被插入,id来自MyModel。我希望Rails也知道,然后插入我的模型。最新的其他模型id,没有调用。save我能够在以后

我有一个问题,遗留代码在Rails 5.1之前的
保存之后的
回调中调用
.save
,但是由于
保存的\u更改为\u属性
如何替换
属性更改?
回调之后的
中,调用
保存两次是个问题(
.save
影响
.changes

我现在需要复制相同的行为,而无需调用
.save
两次

在我的Rails 5.1.7应用程序中(准备5.2升级):


你可以看到MyModel首先被插入,没有
其他模型
,然后
其他模型
被插入,id来自
MyModel
。我希望Rails也知道,然后插入
我的模型。最新的其他模型id
,没有调用
。save

我能够在以后使用
更新列
ave。这将从
my\u model
保存到
other\u model
的引用,而不影响
保存的\u更改
。我的回调现在

在创建之前:

  initial_other = OtherModel.new(name: 'initial')
  other_model_history << initial_other

注意:我不建议任何人在回调中使用这种初始化方式,因为旧代码没有强迫他们这样做。这感觉很脆弱。

如果记录没有保存,不是按照您的意愿保存id吗?如果您
initial\u other=OtherModel.create(name:'initial')呢
这将保存记录并允许您设置归属关系。
my\u model\u id
正在设置,因为您保存的是my model,而不是另一个
OtherModel。create
将需要来自
MyModel
的id,这样Rails将立即保存
MyModel
(在回调中)为了在以后的回调中保存
saved\u change\u to\u属性
,清除我试图保留的
更改。
DEBUG -- :   SQL (0.3ms)  INSERT INTO "my_models" ("created_at", "updated_at") VALUES (?, ?)  [["created_at", "2019-05-31 06:12:27.006455"], ["updated_at", "2019-05-31 06:12:27.006455"]]
DEBUG -- :   SQL (0.1ms)  INSERT INTO "other_models" ("my_model_id", "name", "created_at", "updated_at") VALUES (?, ?, ?, ?)  [["my_model_id", 3], ["name", "initial"], ["created_at", "2019-05-31 06:12:27.015472"], ["updated_at", "2019-05-31 06:12:27.015472"]]
DEBUG -- :    (1.5ms)  commit transaction
  initial_other = OtherModel.new(name: 'initial')
  other_model_history << initial_other
update_column('latest_other_model_id', other_model_history.last.id)