Datamapper JSON哈希不更新

时间:2011-05-23 22:33:07

标签: ruby json hash datamapper

在带有DataMapper和dm-types的Ruby / Sinatra中,在模型钩子中我有这段代码:

self.parent.meta[:post_count] += 1
self.parent.save

不幸的是,这不起作用 - meta是一个JSON类型的列,不会更新。请帮帮忙?

1 个答案:

答案 0 :(得分:1)

当您通过自己的API(在您的情况下为#[])修改复杂属性值(例如JSON)时,很遗憾地绕过DM中的脏跟踪系统,这意味着您的资源不会被标记为脏。解决这个问题不是一个小问题,但迟早会完成。

现在作为一种解决方法,您可以覆盖整个元属性值并增加post_count,例如:

self.parent.meta = parent.meta.merge("post_count" => parent.meta.fetch("post_count", 0)+1)

我知道它看起来不太好但是现在没有其他办法可以做到。您可以将该代码封装在increment_post_count之类的方法中,以使其正确。

另外,请注意您应该使用字符串键而不是符号。