Звучит так, как будто вы говорите, что хотите изменить поведение того или иного атрибута, чтобы он тихо игнорировал вас. Я думаю, что инстинкт, почему вы хотите запечатать это, является разумным, но если вы подумаете об этом немного больше, вы можете подумать, что если вы будете делать такие вещи во многих местах, то использование ваших объектов начнет сбивать с толку, особенно для кого-то, кто плохо знает код.
Возможно, вы хотите сделать это, потому что есть другой код, использующий модель Car, который хочет устанавливать соединения, но на самом деле не имеет полной картины, поэтому он пробует вещи, которые вы хотите выполнить только в первый раз. Гораздо лучше обрабатывать такие операции исключительно внутри класса, который имеет полную картину, такую как модель автомобиля или объект обслуживания.
Если вы все еще действительно хотите контролировать это «связывающее» поведение вне автомобиля, тогда вы можете полностью переопределить attr_writer в классе Car. Я определенно рекомендую делать это с обратным вызовом before_save.
def connected_at=(new_value)
if @connected_at
raise StandardError, 'connected_at has already been set'
end
@connected_at = new_value
end
Это будет работать независимо от того, как вы пытаетесь присвоить значение. Если вам интересно, что происходит выше, прочитайте об attr_accessor в ruby.