Мне нужно сравнить некоторые значения атрибутов модели 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 для символа, чтобы получить атрибут модели. Кто-нибудь еще сталкивался с этим, работал над этим, тоже был смущен этим? заранее спасибо