问题描述
|
在具有DataMapper和dm-types的Ruby / Sinatra中,在模型挂钩中,我具有以下代码块:
self.parent.Meta[:post_count] += 1
self.parent.save
不幸的是,这行不通-作为JSON类型列的Meta不会得到更新。请帮助?
解决方法
当您通过复杂的属性值(例如JSON)通过自己的API(在您的情况下为#[])修改时,DM中的脏跟踪系统很遗憾会被绕开,这意味着您的资源不会被标记为脏。解决这个问题不是小事,但迟早会解决。
现在,作为一种解决方法,您可以覆盖整个meta属性值并增加post_count,例如:
self.parent.meta = parent.meta.merge(\"post_count\" => parent.meta.fetch(\"post_count\",0)+1)
我了解它看起来不太好,但是现在没有其他方法可以做到这一点。您可以使用类似increment_post_count
的方法封装该代码以使其正确。
另外,请注意,您应该使用字符串键而不是符号。