degreesoffun
degreesoffun

Reputation: 359

Rails 4 Postgresql array data-type: updating values

I am just starting to use the array data-type in Postgres with Rails 4 but I am having trouble getting values on an existing array to update. I have a column called 'quantity' that is an array of integers( [0,0] ). I want to update the value at 'quantity[0]' and I have tried the following in the console:

a = Asset.find(2) 
=> #<Asset id: 2, quantity: [0,0]>

a.quantity[0] = 5
=> 5 

a.quantity_will_change! 
=> [5, 0] 

a.save
=> true

a.reload
=> #<Asset id: 2, quantity: [0,0]>

As you can see, the asset object's quantity value is change but when I try to save the object using 'a.save' the change is not reflected when I reload the object.

Any help would be greatly appreciated.

Thanks

Upvotes: 4

Views: 2188

Answers (2)

dredozubov
dredozubov

Reputation: 725

<attribute>_will_change! will only update value if array has been replaced. In-place modifications like []= won't be saved at all.

Upvotes: 1

Peter Alfvin
Peter Alfvin

Reputation: 29389

My reading of http://apidock.com/rails/ActiveRecord/Dirty is that you have to call ..._will_change! before you change the attribute. You should be able to confirm this by examining changes under various scenarios.

Update: I just tested the behavior with a string attribute, and it still saves the updated string even if the change was made before ..._will_change is called, so my interpretation may be off.

Upvotes: 2

Related Questions