Вы хотите изменить атрибуты хэша. Здесь есть немного дополнительного кода, чтобы гарантировать, что интересующие вас атрибуты готовы к использованию с to_json или другим методом, который зависит от атрибутов при загрузке объекта.
class Location < ActiveRecord::Base
belongs_to :event
before_create :generate_oid
validates_associated :event
after_save :event_oid
attr_accessor :event_oid
def event_oid
@event_oid = @attributes["event_oid"] = event.oid if event.nil?
end
def after_initialize
event_oid
end
end
to_json и множество других методов, которые генерируют списки вещей на основе атрибутов объектов. Который заполняется при инициализации объекта таблицами базы данных и именами, к сожалению, переменные экземпляра не обновляют этот хэш.
P.S. это не очень СУХО, если у вас есть ряд атрибутов, которые вы хотите использовать таким образом. Вы можете использовать массив символов, детерминированные имена методов и блок class_eval, чтобы применить этот процесс к нескольким символам одновременно.
Внимание
Мы тут возимся с внутренностями рельсов. Невозможно сказать, как это может привести к сбою других вещей. Я не тестировал больше, чем save и to_json, оба из которых работают, когда хэш атрибута содержит ключи, которые не являются также именами столбцов. Так что используйте его на свой страх и риск.