self.name = 'Tom'
Вызывает метод установки name=
, который ActiveRecord генерирует из ваших столбцов. Это просто обновляет объект в памяти и помечает атрибут как измененный, поэтому при вызове .save
или .save!
изменения сохраняются в базе данных.
Был ли устаревшим первый способ изменения значения ?
Нет. Вы просто совершенно не поняли, что он делает. Использование сеттеров никогда не вызывало автоматического обновления базы данных. Это было бы действительно неожиданным поведением.
self.update_column(:name, 'Tom')
и update_column(:name, 'Tom')
на самом деле одно и то же. У первого просто есть явный получатель, а у последнего неявный. Но в обоих случаях получатель self
. Как и его старший брат, метод #update
создает запрос UPDATE sql.