Моя модель счета-фактуры имеет атрибут address_id, и я не хочу, чтобы этот address_id изменялся НАВСЕГДА. Поэтому я не хочу, чтобы это происходило вне класса:
invoice.address_id = 1
invoice.address = some_address
Rails автоматически добавляет этот атрибут address_id в модель из таблицы счетов-фактур, так как я могу объявить этот атрибут частным / защищенным? Звонок
attr_protected :address_id
Скорее всего, это не решение, поскольку, согласно документации, оно предотвращает только массовые назначения.
Спасибо!





Не так красиво, как однострочник, но код ниже должен работать (и вы всегда можете выполнить метапрограммирование, чтобы написать «неизменяемый» метод)
def address_id=(id)
if new_record?
write_attribute(:address_id, id)
else
raise 'address is immutable!'
end
end
хорошо - не знал, что метод существует;) @Gishu no, я не думаю, что он заблокирует модель сохранения - он просто проигнорирует изменения в полях, перечисленных в * атрибутах
Этот метод доступен только в Rails 2. *? Я работаю в Rails 1.2.6.
Не уверена. Поищи это. Добавьте его, если это не так. :)
Разве это не помешало бы Rails обновить и сохранить модель обратно в БД?