Le migrazioni vengono eseguite solo quando si crea un database o si apportano modifiche alla struttura del database, non quando si salva un nuovo record. Mikhail ha ragione nel suggerire un before_save
richiama. Puoi fare qualcosa del genere nel tuo modello:
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
Nota che RANDOM()
funziona per PostgreSQL e SQLite, ma non per MySQL. Per MySQL devi usare RAND()
invece.