I'm wondering if there is something at work here that I don't understand or if I've run into a bug in ActiveRecord (4.1.1).
I have a database full of records with only one attribute, a field a bit of JSON in it. I take one and try to update it like so.
test = Submission.find(1)
test.update_attribute('json_data',similar_but_different_json(test.json_data))
Let's assume the method similar_but_different_json
makes a small update to that JSON. In my case I'm fixing some data errors that were created by a broken form.
When doing this, I don't get any errors, I show a commit in the console but no data submitted and get a return of true
.
In order to actually update the record I have to do this.
test = Submission.find(1)
old_json_data = test.json_data
test.json_data = ""
test.json_data = similar_but_different_json(old_json_data)
test.save
What seems to be happening is that ActiveRecord doesn't identify that a change has been made that has to be saved. Could this be why setting the field to an empty string then back to JSON allows the record to save?