Миграциите се изпълняват само когато създавате база данни или правите промени в структурата на базата данни, а не когато запазвате нов запис. Михаил е прав, като предлага before_save
обратно повикване. Можете да направите нещо подобно във вашия модел:
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
Обърнете внимание, че RANDOM()
работи за PostgreSQL и SQLite, но не и за MySQL. За MySQL трябва да използвате RAND()
вместо това.