Migrace se spouští pouze při vytváření databáze nebo provádění změn ve struktuře databáze, nikoli při ukládání nového záznamu. Michail má pravdu, když navrhuje before_save
zpětné volání. Ve svém modelu můžete udělat něco takového:
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
Všimněte si, že RANDOM()
funguje pro PostgreSQL a SQLite, ale ne pro MySQL. Pro MySQL musíte použít RAND()
místo toho.