经过多年的 AR 经验,我正在使用 DataMapper 作为 ORM 框架。出于这个原因,我有时会尝试找到一个特定的 DM 函数来反映 AR 的某些行为。有时我很幸运,有时我不是。使用#reload 指令,我有点不知所措。该方法存在,但不知何故并没有达到我的预期。基本上,DM 以某种方式将实例中的每个属性标记为“未加载”,而不是 AR 行为中实例属性将通过数据库进行更新。
有人可以告诉我这是否可以使用 DM 来实现?
经过多年的 AR 经验,我正在使用 DataMapper 作为 ORM 框架。出于这个原因,我有时会尝试找到一个特定的 DM 函数来反映 AR 的某些行为。有时我很幸运,有时我不是。使用#reload 指令,我有点不知所措。该方法存在,但不知何故并没有达到我的预期。基本上,DM 以某种方式将实例中的每个属性标记为“未加载”,而不是 AR 行为中实例属性将通过数据库进行更新。
有人可以告诉我这是否可以使用 DM 来实现?
DataMapper 将属性标记为未加载,并将在下次访问时加载它们。
这是支持延迟加载组的结果。DM-1 将等待查看接下来访问的属性以仅加载一组有限的属性。
默认情况下,所有属性都在 :default 组中,因此很可能所有属性都在您点击一个时加载。
如果不需要这种惰性行为,您可以执行以下操作:
resource = YourClass.first(:some => :stuff)
# full non lazy reload (make sure you do not have
# a reference to old somewhere that causes confusion
resource = resource.model.get(resource.id)