As migrações são executadas apenas quando você cria um banco de dados ou faz alterações na estrutura do banco de dados, não ao salvar um novo registro. Mikhail está correto ao sugerir um
before_save
ligue de volta. Você pode fazer algo assim no seu modelo:class Model < ActiveRecord::Base
before_save :set_empty_color_to_random_value
def set_empty_color_to_random_value
self.color = Color.order("RANDOM()").first.color if self.color.empty?
end
end
Observe que
RANDOM()
funciona para PostgreSQL e SQLite, mas não para MySQL. Para MySQL você tem que usar RAND()
em vez de.