Ruby on rails 如何在不调用的情况下将子记录的id保存在父记录中。是否再次保存?
我有一个问题,遗留代码在Rails 5.1之前的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我能够在以后
保存之后的回调中调用.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)