Подтвердить что ты не робот

Как защитить атрибут модели Rails?

Моя модель счета имеет атрибут address_id, и я не хочу, чтобы этот адрес_ид менялся FOREVER. Поэтому я не хочу, чтобы это происходило вне класса:

invoice.address_id = 1
invoice.address = some_address

Rails автоматически добавляет этот атрибут address_id к модели из таблицы счетов, поэтому как я могу объявить этот атрибут private/protected? Вызов

attr_protected :address_id

скорее всего, не является решением, поскольку на основе документации он только предотвращает массовые назначения.

Спасибо!

4b9b3361

Ответ 2

Не так красиво, как один лайнер, но код ниже должен работать (и вы всегда можете выполнить метапрограммирование, чтобы написать "неизменный" метод)

def address_id=(id)
  if new_record?
    write_attribute(:address_id, id)
  else
    raise 'address is immutable!'
  end
end