Как обновить столбцы hstore в Rails 4

Есть ли способ ограничить количество hstore столбцов, которые можно сохранить? У меня есть код ниже для этого:

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

но это, кажется, по-прежнему позволяет сохранять другие имена ключей, т.е. средняя_область123

Кроме того, как я могу обновить hstore, например update_attributes или update?


person Passionate Engineer    schedule 17.02.2014    source источник


Ответы (1)


Я могу ошибаться, но я предполагаю, что вы звоните 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 заключается в том, что доступ к сериализованному столбцу позволит добавить новые неизвестные атрибуты, поэтому лучше всего обращаться напрямую к явно указанным вами атрибутам.

person zwippie    schedule 17.02.2014