问题
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
回答1:
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.
回答2:
<attribute>_will_change!
will only update value if array has been replaced. In-place modifications like []=
won't be saved at all.
来源:https://stackoverflow.com/questions/19989924/rails-4-postgresql-array-data-type-updating-values