Если у вас уже есть данные, вы не можете сделать это в действии обратного вызова create, поскольку эти элементы уже созданы.Однако обратный вызов create поможет вам создать новые объекты, которые вы создадите:
after_create :set_order_attribute
def set_order_attribute
self.update_columns(order: id) if order.nil?
end
Вы можете технически обновить существующие данные в миграции как оператор SQL, но я бы не рекомендовал использовать команды, включающие модель ActiveRecordпоскольку миграция может когда-нибудь прерваться по мере изменения модели.Чтобы сделать это в процессе миграции, вы должны иметь команду execute в методе: up (не знаете, какое поведение вы хотели бы: down), например так:
def up
table_name = "foo"
execute "UPDATE #{table_name} SET order = id;"
end
В качестве альтернативы вы можете создать отдельную задачу rake длясделать обновление;это поможет сохранить ваши миграции более чистыми и лучше контролировать время запуска задачи обновления.