【发布时间】:2014-05-28 04:46:38
【问题描述】:
我正在为如何正确实现 Rails 回调而苦苦挣扎:
我有一个模型 X(具有属性 A、B 和 C)与模型 Y(具有属性 C、D 和 E - 即都具有属性 C)具有 has_many 关系。我在 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
【问题讨论】:
标签: ruby-on-rails validation callback beforeupdate