Migraties worden alleen uitgevoerd wanneer u een database aanmaakt of wijzigingen aanbrengt in de structuur van de database, niet wanneer u een nieuw record opslaat. Mikhail heeft gelijk in het suggereren van een before_save terugbellen. U kunt zoiets in uw model doen:
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
Merk op dat RANDOM() werkt voor PostgreSQL en SQLite, maar niet voor MySQL. Voor MySQL moet je RAND() . gebruiken in plaats daarvan.