У меня есть довольно большой json-документ, который я должен хранить в поле для каждого экземпляра оценки в своем приложении. Со временем определенные действия в приложении потребуют от меня изменить различные пары ключ/значение в документе. Тип данных Rails 4 и PostgreSQL json кажется идеальным для этой проблемы, но я не могу получить изменения для фиксации в базе данных.
Здесь сокращен рабочий процесс:
У меня есть json файл, который я импортирую в поле для каждой записи оценки:
// example.json
{ "question_1":"no" }
Я создаю запись и импортирую json:
>> evaluation = Evaluation.create assessments: File.read("example.json")
>> evaluation.assessments = File.read("#{Rails.root}/example.json")
=> "{ \"question_1\":\"no\" }"
Вызов поля оценки выглядит нормально:
>> evaluation.assessments
=> {"question_1"=>"no"}
OR
>> evaluation.assessments["question_1"]
=> "no"
Пример 1
Изменение json не работает слишком хорошо. Это ничего не делает:
>> evaluation.assessments["question_1"] = "yes"
=> "yes"
>> evaluation.assessments["question_1"]
=> "yes"
>> evaluation.save
(0.3ms) BEGIN
(0.2ms) COMMIT
=> true
Пример # 2
Замена полностью новым объектом выполняется:
>> evaluation.assessments = {"question_1"=>"yes"}
=> {"question_1"=>"yes"}
>> evaluation.save
(0.3ms) BEGIN
SQL (0.7ms) UPDATE "evaluations" SET "assessments" = $1, "updated_at" = $2 WHERE "evaluations"."id" = 1 [["assessments", "{\"question_1\":\"yes\"}"], ["updated_at", "2014-08-21 00:52:03.581817"]]
(3.8ms) COMMIT
=> true
- Что я делаю неправильно в примере # 1?
- Почему база данных не фиксирует изменения, внесенные мной в столбец
evaluation.assessment
при вызове, изменении значения и вызове сохранения в экземпляре?