4

我刚刚开始在带有 Rails 4 的 Postgres 中使用数组数据类型,但我无法获取现有数组上的值以进行更新。我有一个名为“数量”的列,它是一个整数数组( [0,0] )。我想更新 'quantity[0]' 的值,我在控制台中尝试了以下操作:

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]>

如您所见,资产对象的数量值发生了变化,但是当我尝试使用“a.save”保存对象时,重新加载对象时不会反映更改。

任何帮助将不胜感激。

谢谢

4

2 回答 2

2

我对http://apidock.com/rails/ActiveRecord/Dirty的阅读是,您必须在更改属性..._will_change! 之前调用。您应该能够通过changes在各种情况下进行检查来确认这一点。

更新:我刚刚使用字符串属性测试了该行为,即使在..._will_change调用之前进行了更改,它仍然保存更新的字符串,所以我的解释可能是错误的。

于 2013-11-14T22:46:50.720 回答
1

<attribute>_will_change!如果数组已被替换,只会更新值。[]=根本不会保存就地修改。

于 2014-05-29T22:19:41.107 回答