У меня есть объект ActiveRecord, который сериализовал свойство hash для одного из моих столбцов базы данных. Я хотел бы уйти от этого, так как запрос одним из хеш-ключей очень сложно/не чист. Поэтому я разделил все ключи хэша на отдельные свойства модели. Тем не менее, у меня много мест, использующих этот код, поэтому пока я конвертирую все, что я хотел бы иметь свойство в моем объекте ActiveRecord, предназначенном только для Rails (т. Е. Он не заполняется обратно в мою базу данных), который обертывает эти свойства в хеш, как это было раньше, и позволяют устанавливать и получать значения.Hash getter и setter на объекте ActiveRecord
Так, например, это то, что я имел обыкновение иметь:
class MyCls < ActiveRecord::Base
serialize :state, Hash
attr_accessible :id, :mode
Я избавляясь от :state
и заменить его на 7 различных значений, составивших этот хэш. Но я все равно хотел бы получить доступ к этим значениям следующим образом: MyObj.state[:obj_num]
. Хотя у меня теперь есть obj_num
как свойство (т. Е. MyObj.obj_num
). Я думаю, что лучший способ сделать это - иметь свойство state
с геттером и сеттером, но я не могу, похоже, получить синтаксис правильно. Для сеттера мне нужно будет поддерживать как настройку хэша в целом, так и установку отдельных клавиш.
Спасибо за отзыв. Думаю, я не мог скрыть тот факт, что я новичок в разработке Ruby/Rails :) – Kyle
Я бы этого не догадался. Метапрограммирование не так просто и не очень хорошо известно, хотя огромное количество функций по умолчанию для рельсов основано на таких вещах. – davidb
Я ответил на это подробно здесь: http://stackoverflow.com/a/21286988/1001324 – davidb