如何在Rails 4中更新hstore列

时间:2014-02-17 21:33:19

标签: ruby-on-rails ruby postgresql ruby-on-rails-4 hstore

有没有办法限制可以保存hstore列的内容?到目前为止,我已经得到了以下代码:

store_accessor :widget_locations, :left_area1, :mid_area1, :left_area2, :mid_area2, :right_area2

但这似乎仍然允许保存其他键名,即。 middle_area123

另外,我如何更新hstoreupdate_attributesupdate

1 个答案:

答案 0 :(得分:4)

我可能错了,但我的猜测是你在widget_locations上打电话

item.widget_locations[:left_area1] = thing

如果是这样,您应该将其更改为

item.left_area1 = thing

因为您告诉store_accessor创建将序列化到数据库列:left_area1, :mid_area1, :left_area2, :mid_area2, :right_area2的属性:widget_locations。现在这些属性的行为类似于普通属性,因此您可以对它们进行验证等。

这也允许您照常更新项目:

item.update(name: 'Test', left_area: 'garden', mid_area: 'livingroom')

hstore的问题是,访问序列化列允许您添加新的未知属性,因此最好直接访问您明确指定的属性。