Migracje są uruchamiane tylko podczas tworzenia bazy danych lub wprowadzania zmian w strukturze bazy danych, a nie podczas zapisywania nowego rekordu. Michaił słusznie proponuje before_save
oddzwonić. W swoim modelu możesz zrobić coś takiego:
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
Zauważ, że RANDOM()
działa dla PostgreSQL i SQLite, ale nie dla MySQL. Dla MySQL musisz użyć RAND()
zamiast tego.