我正在为如何正确实现 Rails 回调而苦苦挣扎:
我有一个模型 X(具有属性 A、B 和 C)与模型 Y 具有 has_many 关系(具有属性 C、D 和 E - 即都具有属性 C)。我在 X 上有一个模型验证,指出所有关联模型 Y 的属性 C 必须与模型 X 的属性匹配。
因此,在更新模型 X 期间修改 C 属性时,我使用了“before_validation, on :update”回调来首先更改所有关联 Y 模型上的 C 值以匹配模型 X 上更新后的 C 值。这允许模型 X 进行验证和更新。但是,关联模型 Y 上修改后的 C 值不会在模型 X 重新加载时保持不变并恢复到其原始值。
那么我是否还需要一个“after_save”回调来“锁定”模型 Y 的更改?还是我应该使用不同的方法来做这种事情?
- - - 更新 - - - - - -
我想我可能错误地保存到数据库中:
我的回调代码
class X
....
before_validation :update_Ys, on: :update
....
def update_Ys
self.Ys.each do |k|
k['C'] = self.C
k.save
end
end