【问题标题】:Is there a way to replace cloned model with the updated original model?有没有办法用更新的原始模型替换克隆模型?
【发布时间】:2014-05-23 07:20:35
【问题描述】:

我正在使用deep_cloneable gem 创建模型及其关联的副本。当原始模型中的数据发生一些变化时,我希望使该数据与克隆模型保持同步。我不想每次都删除/重新创建,因为它会生成新的 ID。

在 ruby​​/rails 中是否有一种干净的方法可以做到这一点?

【问题讨论】:

  • 你为什么要那样做?!为什么要保留一份副本,然后将其更新为原始版本?!
  • 这是业务需求之一。更像是 github 模型。您克隆存储库,对其进行处理,然后合并到主分支。

标签: ruby-on-rails ruby clone


【解决方案1】:

我认为您不会对这种方法有很好的体验。您将如何跟踪副本的更改?每次都会覆盖原始值吗?

您与 github 的类比没有意义,因为父项的更改不会反映在子项中。我在 fork 中所做的每一项更改都是我的 fork 本地的。原点的每一个变化都是原点的局部变化。

但是

你可以使用 rails 观察者:http://api.rubyonrails.org/v3.2.13/classes/ActiveRecord/Observer.html

回调:http://guides.rubyonrails.org/active_record_callbacks.html

通知:http://api.rubyonrails.org/classes/ActiveSupport/Notifications.html

透明地监控您喜欢的任何 AR 对象的变化。

【讨论】:

  • 我没有做任何花哨的事情。我对 github 的类比是:用户将有一个本地工作空间来存放他们的内容,他们可以决定何时将他们的本地副本与主副本同步。同步基本上会覆盖现有记录。我能够使用常规的 Rails 功能来完成这项工作。仅供参考:Rails 4 不推荐使用观察者。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
  • 2019-12-20
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 2022-10-13
相关资源
最近更新 更多