after_touch回调无权访问子级的更新属性

时间:2015-05-12 19:22:02

标签: ruby-on-rails callback

我不知道如何解决以下鸡蛋和鸡肉的问题 我有一个名为Batch的模型,通过Status回调触及验证时的父模型before_validation。 在父模型中的after_touch回调 - Status,(状态has_many批处理) - 我正在检查Status实例的所有子项是否都将属性设置为true。
我面临的问题是所有这些都是在一个数据库提交中执行的,因此即将使用设置为true的属性更新的Batch的子实例不会保留在after_touch内部after_find 1}}父母的回调并不是真的回应,所有这一切都失败了。

您是否认为可以在不对数据库进行两次提交的情况下使其正常工作?

一个重要信息:我正在检查的属性是一个虚拟属性,在子模型中Batch回调中赋值($LocalUsers = [ADSI]"WinNT://$env:COMPUTERNAME"

2 个答案:

答案 0 :(得分:0)

是,
您可以在父模型中添加 validates_associated:batches 并在保存时在批处理(子)模型中添加验证,以检查该属性是否为真。

希望我能清楚地回答。

谢谢

答案 1 :(得分:0)

在认为我改变逻辑后,我的子模型更新如何触发Status上的更新。

我没有在父级中使用after_touch回调,而是将所有代码移动到属于Batch的回调。在after_save回调中使用self.status.batches之前,我还必须更改用于after_save的回调类型,以便将批处理实例保留到数据库。