Is there a way to restrict what hstore columns can be saved? I've got below code for doing this so far:

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

but this seems to still allow other key names to be saved ie. middle_area123

Also how am I able to update hstore like update_attributes or update?

Question author Passionate-developer | Source



I could be wrong but my guess is that you are making calls on widget_locations like

item.widget_locations[:left_area1] = thing

If so, you should change that to

item.left_area1 = thing

because you told the store_accessor to create attributes :left_area1, :mid_area1, :left_area2, :mid_area2, :right_area2 that will be serialized to database column :widget_locations. Now these attributes will behave like normal attributes, so you can put validations on them etc.

This also allows you to update an item as usual:

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

The catch with a hstore is that accessing the serialized column will allow you to add new unknown attributes, so it is best to directly access the attributes you explicitly specified.

Answer author Zwippie