我正在使用Rails 4.1.0,Ruby 2.1.0和Postgres 9.3.0.0。
我试图将更改保存到一个列,这是一个hstores数组(以ruby用语表示的哈希数组)。
这是产品型号中的(简化)代码,用于保存更改:
def add_to_cart_with_credits(cart)
cart.added_product_hashes << {"id" => self.id.to_s, "method" => "credits"}
# For some reason, this isn't saving (without the exclamation, as well)
cart.save!
end
注意事项:
任何想法我做错了什么?我没有看到错误:服务器日志记录cart.added_product_hashes
列正确更新,但更改不会持续存在。
解
正如詹姆斯指出的那样,<<
并没有将记录标记为脏,因为它就地编辑了数组。虽然我没有在数组列中更改hstore本身,但看起来除非明确重建属性,否则不会拾取对封闭数组的更改。以下代码修复了问题:
def add_to_cart_with_credits(cart)
cart.added_product_hashes = cart.added_product_hashes + [{"id" => self.id.to_s, "method" => "credits"}]
# Now we're all good to go!
cart.save!
end
詹姆斯还提出了一种更简洁的特定方法。
答案 0 :(得分:4)
请参阅&#34; New data not persisting to Rails array column on Postgres&#34;
当正在更新属性时,ActiveRecord无法识别对阵列的更改。
您也可以这样做:
cart.added_product_hashes_will_change!