在带有DataMapper和dm-types的Ruby / Sinatra中,在模型钩子中我有这段代码:
self.parent.meta[:post_count] += 1
self.parent.save
不幸的是,这不起作用 - meta是一个JSON类型的列,不会更新。请帮帮忙?
答案 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
之类的方法中,以使其正确。
另外,请注意您应该使用字符串键而不是符号。