0

我正在为如何正确实现 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
4

2 回答 2

0

我最终做的是有两个回调

首先,一个 'before_validation, on :update' 其中

def update_Ys
  self.Ys.each do |k|
    k['C'] = self.C 
  end
end

这允许对模型 X 进行验证

然后是“after_save”,我直接在数据库中保存更新的模型 Ys。我猜这不是最好的方法,所以如果有人对如何改进有任何建议,请告诉我。

于 2014-05-28T06:22:29.243 回答
0

您需要在模型 X 上添加 before_save 回调。然后检查它是否具有更改的属性 C。如果有,则需要应用所有逻辑以在该回调中相应地更新模型 Y。

于 2014-05-28T05:10:34.357 回答