Если я вас правильно понимаю, вы хотите установить значение d обычным способом, например так: myobject.d = 5
. На основе значения в c, d будет сохранено с правильным значением.
Этого можно достичь с помощью фильтра before_save
, в котором вы установите новое значение для d.
Вы также можете перезаписать метод установки для d:
def d=(value)
write_attribute(:d, getColumnDValue(value))
end
С первым методом, фильтром, ваш объект будет иметь «недопустимое» значение, пока не будет сохранен. Если вы перезаписаете установщик, новое значение будет немедленно записано в объект. Вам решать, какой метод подходит вам лучше всего.