Migrasi hanya dijalankan saat Anda membuat database atau membuat perubahan pada struktur database, bukan saat menyimpan rekaman baru. Mikhail benar dalam menyarankan before_save
panggilan balik Anda dapat melakukan sesuatu seperti ini dalam model Anda:
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
Perhatikan bahwa RANDOM()
bekerja untuk PostgreSQL dan SQLite, tetapi tidak untuk MySQL. Untuk MySQL Anda harus menggunakan RAND()
sebagai gantinya.