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
?
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.