Мне нужно сравнить некоторые значения атрибутов модели Rails (2.3.11) до и после обновления базы данных, поэтому я начну с поиска своей записи и сохранения существующих значений атрибутов в хэш-памяти следующим образом:
id = params[:id]
work_effort = WorkEffort.find(id)
ancestor_rollup_fields = {
:scheduled_completion_date => work_effort.scheduled_completion_date
}
work_effort.update_attributes(params.except(:controller, :action))
#etcetera
Примечание. Я придерживаюсь "наилучшей практики" использования символа для хеш-ключа.
Затем у меня есть метод, который берет модель и хеш, чтобы определить возможные дополнительные шаги, если значенияиз хэша и атрибуты модели не совпадают.Чтобы определить это, я попытался получить значение атрибута модели в каждом цикле, но сначала получал ноль:
def rollup_ancestor_updates(work_effort, ancestor_rollup_fields)
ancestor_rollup_fields.each do |key, value|
model_val = work_effort.attributes[key] #nil
#etcetera
При отладке вышеизложенного я заметил, что жесткое кодирование строки как ключа:
work_effort.attribute['scheduled_completion_date']
Возвращает желаемое значение.Итак, в каждом блоке я пробовал следующее, и это работало:
model_val = work_effort.attributes[key.to_s]
Есть ли другой способ сделать это?Для меня, имея всего 3 месяца опыта работы с Ruby / Rails, использование символов в качестве ключей хеша сбивает с толку, как это рекомендовано в качестве лучшей практики, но затем приходится вызывать .to_s для символа, чтобы получить атрибут модели.Кто-нибудь еще испытывал это, работал вокруг этого, был также смущен этим?Заранее спасибо