Las migraciones solo se ejecutan cuando crea una base de datos o realiza cambios en la estructura de la base de datos, no cuando guarda un nuevo registro. Mikhail tiene razón al sugerir un before_save
llamar de vuelta. Puedes hacer algo como esto en tu 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
Tenga en cuenta que RANDOM()
funciona para PostgreSQL y SQLite, pero no para MySQL. Para MySQL tienes que usar RAND()
en su lugar.