Migraties worden alleen uitgevoerd wanneer u een database aanmaakt of wijzigingen aanbrengt in de structuur van de database, niet wanneer u een nieuw record opslaat. Mikhail heeft gelijk in het suggereren van een before_save
terugbellen. U kunt zoiets in uw model doen:
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
Merk op dat RANDOM()
werkt voor PostgreSQL en SQLite, maar niet voor MySQL. Voor MySQL moet je RAND()
. gebruiken in plaats daarvan.