Хэш DataMApper JSON не обновляется - PullRequest
0 голосов
/ 24 мая 2011

В Ruby / Sinatra с DataMapper и dm-типами, в хуке модели у меня есть этот блок кода:

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

К сожалению, это не работает - мета, которая является столбцом типа JSON, не обновляется. Помогите, пожалуйста?

1 Ответ

1 голос
/ 24 мая 2011

Когда вы изменяете значение комплексного свойства, такого как JSON, через свой собственный API (в вашем случае # []), система грязного отслеживания в DM, к сожалению, игнорируется, что означает, что ваш ресурс не будет помечен как грязный. Это не тривиальный вопрос, но рано или поздно это будет сделано.

Пока что в качестве обходного пути вы можете переопределить все значение мета-свойства и увеличить значение post_count, например:

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

Я понимаю, что это не выглядит красиво, но другого способа сделать это сейчас нет. Вы можете инкапсулировать этот код в метод, подобный increment_post_count, чтобы сделать его правильным.

Также обратите внимание, что вы должны использовать строковые ключи, а не символы.

...